美元符号在PHP中意味着什么?

use*_*637 16 php oop

美元符号在PHP中意味着什么?我有这个代码:

<?php
  class Building {
    public $number_of_floors = 5;
    private $color;

    public function __construct($paint) {
      $this->color = $paint;
    }

    public function describe() {
      printf('This building has %d floors. It is %s in color.', 
        $this->number_of_floors, 
        $this->color
      );
    }
  }

  $bldgA = new Building('red');

  $bldgA->describe();
?>
Run Code Online (Sandbox Code Playgroud)

它似乎$表示一个变量,如:

$number_of_floors
$color
Run Code Online (Sandbox Code Playgroud)

但是当我看到以下情况时,我感到困惑:

$bldgA->describe();
$bldgA->number_of_floors;
Run Code Online (Sandbox Code Playgroud)

为什么在这些变量之前没有美元符号?

Mik*_*ona 18

你是对的,$是变量.但是在类实例中,你不再使用$属性,因为PHP会解释,这可能会导致错误.例如,如果您使用

$bldgA->$number_of_floors;
Run Code Online (Sandbox Code Playgroud)

这不会返回对象的$ number_of_floors属性,但PHP会首先查看$ number_of_floors的值,比如说3,所以前一行是

$bldgA->3;
Run Code Online (Sandbox Code Playgroud)

这会给你一个错误


Ans*_*son 6

$是 PHP 中引用变量的方式。PHP 中的变量是动态类型的,这意味着它们的类型由分配给它们的内容决定。这是PHP 手册中有关变量的页面。

$a = "这是一个字符串";

$b = 1; // 这是一个 int

$bldgA = 新建筑('红色'); // bldgA 是 Building 类的变量和对象(也称为实例)。

$bldgA->描述(); // 这调用了describe(),它是Building类的成员函数(记住$bldgA被声明为Building类的一个对象)

$bldgA->楼层数;// number_of_floors 是 Building 类的数据成员。您可以将其视为类内的变量,但由于它是具有固定名称的类的一部分,因此您不能使用 来引用它$