什么时候应该在PHP类中声明variables?

我是OOP范式的新手,所以这个问题可能有一个简单的解释。

你是否总是需要在类中声明公共对象的variables? 例如:

<?php class TestClass { var $declaredVar; function __construct() { $this->declaredVar = "I am a declared variable."; $this->undeclaredVar = "I wasn't declared, but I still work."; } function display() { echo $this->declaredVar . "<br />"; echo $this->undeclaredVar; echo "<br /><br />"; } } $test = new TestClass; $test->display(); $test->declaredVar = "The declared variable was changed."; $test->undeclaredVar = "The undeclared variable was changed."; $test->display(); ?> 

在这个代码中,即使$declaredVar是唯一被声明的variables, $undeclaredVar也是可访问和可用的 – 看起来好像我宣称它是公共的。

如果未声明的类variables总是可以这样访问,那么在前面声明它们有什么意义呢?

该variables不是未初始化的,它只是未声明的。

在类定义中声明variables是可读性风格的一个要点。 另外,你可以设置可访问性(私人或公共)。

无论如何,显式声明variables与OOP无关,它是编程语言特定的。 在Java中,你不能这样做,因为variables必须显式声明。

如果你在类中声明了一个成员,你可以设置它的可访问性

 private $varname; 

你应该总是声明你的成员variables,并在类中指定它们的可访问性。 我喜欢把这些信息放在课程结束后。

只要有足够的信息,你就应该定义它们。 可能在构造函数中或通过setter函数。

这样做很重要,因为它使得人们使用你的代码更容易。 他们不必猜测不同房产从哪里来,或者为什么他们在那里。 此外,大多数(如果不是全部的话)IDE将不会在类variables上使用,除非您将它们声明在某个地方。 代码完成/提示是IDE的许多好处之一,没有声明你的variables,你将使这个function无用。

一般的OOP封装范例说,你不应该公开你的内部状态variables,这意味着它们应该是私有的,这允许你改变你的类的实现,而不需要改变你使用它的代码。 通过构造函数和类的getter和setters方法初始化variables是更好的做法。

一般情况下,一旦有足够的信息正确地执行variables,variables就应该被初始化。

如果一个类variables需要某些信息被明智地初始化,那么这个信息应该传递给构造函数。

使用PHP的语法在定义点隐式声明variables是,恕我直言,一个肯定的方式来引入错误 – 如果你的类需要一个variables然后声明它,并使用所有的信息隐藏OOP提供给你。

正如Federico Culloca所说:“这个variables不是未初始化的,它只是未被宣布的”。 你也没有为它们定义任何访问修饰符,所以它们的行为就像public修饰符一样适用于它们。

你可能已经知道了。 PHP是一种松散types的语言。 但程序员应该始终遵循最佳实践(但不要在php中使用原始数据types)。

你应该使用私有修饰符来为类级别的variables,并为它们提供accessor和mutator方法(Getters和Setter)。