我是OOP范例的新手,所以对这个问题可能有一个简单的解释......
您是否始终需要在类中声明公共对象范围的变量?例如:
<?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
是唯一声明的变量,$undeclaredVar
也是可访问且可用的 - 它似乎就像我已将其声明为公共一样。
如果未声明的类变量总是可以像这样访问,那么预先声明它们的重点是什么?
答案 0 :(得分:40)
该变量未被初始化,它只是未声明的。
在类定义中声明变量是可读性的一种风格。 另外,您可以设置辅助功能(私人或公共)。
无论如何,明确声明变量与OOP无关,它是特定于编程语言的。在Java中,你不能这样做,因为必须明确声明变量。
答案 1 :(得分:14)
如果在类中声明成员,则可以设置其可访问性,例如
private $varname;
答案 2 :(得分:11)
您应该始终声明您的成员变量并在您的类中指定它们的可访问性。我希望在我的职能之后将这些信息放在课程的最后。
一旦有足够的信息,您应该立即定义它们。可能在构造函数中或通过setter函数。
这样做非常重要,因为它可以让处理代码的人们的生活更加轻松。他们不必猜测不同的属性来自哪里或为什么他们在那里。此外,大多数(如果不是全部)IDE都不会接受类变量,除非你已经在某处声明了它们。代码完成/提示是IDE的众多优点之一,如果不声明变量,您将无法使用该功能。
答案 3 :(得分:1)
封装的一般OOP范例说你不应该暴露你的内部状态变量,这意味着它们应该是私有的,这允许你改变你的类的实现,而不需要改变你使用它的代码。最好通过类的构造函数和getter以及setter方法初始化变量。
答案 4 :(得分:0)
一般情况下,只要有足够的信息就可以初始化变量。
如果一个类变量需要明确初始化某些信息,那么该信息应该传递给构造函数。
使用PHP的语法在定义点隐式声明变量是,恕我直言,这是一种引入错误的绝对方法 - 如果你的类需要一个变量然后声明它,并使用隐藏OOP为你提供的所有信息。
答案 5 :(得分:0)
正如Federico Culloca所说&#34;这个变量未初始化,它只是未宣布的&#34;。此外,您没有为它们定义任何访问修饰符,以便它们的行为类似于应用于它们的公共修饰符。
你可能已经知道了。 PHP是一种松散类型的语言。但是程序员应该始终遵循最佳实践(但不要在php中使用原始数据类型)。
您应该对类级别变量使用private修饰符,并为它们提供访问器和增变器方法(Getters和Setter)。