PHP中美元符号的含义是什么?

20
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();
?>

看起来$表示像变量一样:

$number_of_floors
$color

但是当我看到以下内容时,我会感到困惑:

$bldgA->describe();
$bldgA->number_of_floors;

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


11
嗯,或许现在是再次阅读PHP语言参考手册的时候了... - Kerrek SB
1
请搜索并阅读PHP面向对象编程的基础知识。 - Sarfraz
http://www.php.net/manual/en/language.oop5.basic.php - JJJ
$bldgA = new Building('red'); - 好的,是的,$bldgA 实际上是一个指向对象的变量。$bldgA->number_of_floors; 不是调用“变量”,而是调用属性 ;) - Quasdunk
1
在某些编程语言中,2"red"也是对象。无论如何,“对象”这个比喻确实要求你将对象视为一个单一的东西。当然,它可能有不同的属性可以访问,响应不同的方法,但本质上它是一个统一的整体;这就是整个重点所在。 - Wooble
显示剩余2条评论
7个回答

25
你说得没错,$符号代表变量。但是在类实例中,因为PHP会解释,所以在属性上就不再使用 $ 符号了,否则可能会引起错误。例如,如果你使用

$bldgA->$number_of_floors;

这不会返回对象的$number_of_floors属性,但是PHP将先查看$number_of_floors的值,假设为3,因此前一行将是

$bldgA->3;

那会给你一个错误


1
好的,易于理解的解释。 - Anson

5

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

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

$b = 1; // 这是一个整数

$bldgA = new Building('red'); // bldgA 是一个变量和类 Building 的对象(也称为实例)。

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

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


3
$bldgA = new Building('red');

在这种情况下,$bldgA是一个对象。
$bldgA->describe();

从对象 $bldgA 调用函数 describe()。
$bldgA->number_of_floors;

从对象$bldgA访问变量number_of_floors
但您真的应该查看php.net/manual/en/language.oop5.basic.php

0

$bldgA是Building类的变量

因此,您可以使用$Building->function_name访问类函数

例如:

$foo = $bldgA->describe();

$number_of_floors是类内的一个变量。


$bldgA 不仅仅是一个变量。 - peko
是的,抱歉我试图让他更容易理解。 - Mohammed Shannaq

0

是的,那是一个带有类实例分配的变量。当它是对象时,您可以像这样调用/获取参数。请阅读有关PHP中面向对象编程的内容。它可能非常方便,并帮助您了解其工作原理 :)


错误。不能给一个类分配值,只能给一个类的实例分配值。 - markus

0

$bldgA->number_of_floors;并不是调用一个本地变量,而是调用一个类的属性(就像是类定义的一部分的本地变量)。

然而,你也可以调用$bldgA->$property_name;,其中$property_name是你想要调用的属性的名称。这被称为可变变量,是你在掌握面向对象编程基础之后应该了解的内容。


-1

当编写 $bldgA = new Building('red'); 时,您将变量 $bldgA 分配为类 Building 的新创建对象。对象是一种可能的变量类型。

通常情况下,当您看到 $ 时,它总是指变量。$bldgA->number_of_floors; 应该被理解为:访问变量 $bldgA 中对象的属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接