在PHP中隐式类变量声明?
我一直在看一些代码,并且很难在php类中处理变量声明。具体来说,我看到的代码在使用它们之前没有声明类变量。现在可以预料到这一点,但我找不到任何可能的信息。所以你会期待这个:在PHP中隐式类变量声明?
class Example
{
public function __construct()
{
$this->data = array();
$this->var = 'something';
}
}
工作?这是否会在类实例上创建这些变量以供以后使用?
这个工作同样作为一个正常的变量声明将工作:
$foo = 'bar'; // Created a new variable
class Foo {
function __construct() {
$this->foo = 'bar'; // Created a new variable
}
}
PHP类是不太一样的其他语言,其中的成员变量需要被指定为类声明的一部分。 PHP类成员可以随时创建。
说了这么多,你应该声明变量像public $foo = null;
在类的声明,如果它应该是类的常任理事国,清楚地表达意图。
所以你会期望:(代码示例)工作?
是的。这是非常糟糕的做法(至少它让我的C++皮肤爬行),但它丝毫不会让我感到惊讶。有关使用另一个类而未事先声明的示例,请参见下面的示例2。 http://www.php.net/manual/en/language.oop5.basic.php如果启用E_STRICT,它将引发错误。
这是否会在类实例上创建这些变量以供以后使用?
是的。不是PHP的乐趣?来自C++/C#的背景,PHP花了一段时间用它非常宽松的打字来增长我,但它有它的优势。
这是完全有效的,但意见不同。由于类成员变量的创建在构造函数中,因此它们将存在于对象的每个实例中,除非被删除。
这是传统与信息注释来声明类成员变量:
class Example
{
private $data; // array of example data
private $var; // main state variable
public function __construct()
{
$this->data = array();
$this->var = 'something';
}
}
应该指出,原来的例子会导致公众成员,而你的例子有私人成员。 – 2016-11-08 18:52:59
这第二个例子是关于调用使用'$ this'静态,不是成员变量的方法。 – deceze 2010-06-25 02:20:05
查看第二个例子中的B类。 – Caladain 2010-06-25 02:34:20
是的,我做到了。它调用'A :: foo()'。这里根本没有成员变量。 – deceze 2010-06-25 02:42:15