2009-07-06 79 views
39

我是新来的OOP范例,所以这个问题可能有一个简单的解释...什么时候应该在PHP类中声明变量?

您是否总是需要在类中声明公共对象范围的变量?例如:

<?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是一样访问和使用 - 它似乎表现得好像我已经宣布它为公众。

如果未声明的类变量总是可以像这样访问,那么先声明它们有什么意义?

回答

35

该变量不初始化,它只是未申报。

在类定义中声明变量是可读性风格的一个要点。 另外你可以设置无障碍(私人或公共)。

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

+2

所以这只是因为PHP真的宽恕未申报的变量的工作,对吗? – Andrew 2009-07-06 11:30:34

+1

对。 PHP应该发出一个警告,尽管... place error_reporting(E_ALL);在文件的顶部。 – Stephan202 2009-07-06 11:35:57

1

封装的通用OOP范式说,你不应该让你的内心状态变量出方,这意味着他们应该是私人的,它允许你改变你的类的实现,而不需要改变,你使用它的代码。最好通过构造函数和类的getter和setter方法来初始化变量。

13

如果声明的类中的成员,你可以设置它的辅助功能e.g

private $varname; 
+5

注意:自PHP 5以来,这只被支持(以防万一您被困在4.x树上),但我同意显式设置变量和方法可见性是很好的做法 - 只是因为PHP口译员并不要求这并不意味着你不应该使用它。 – 2009-07-06 12:11:49

0

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

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

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

9

您应该始终声明您的成员变量并在类中指定它们的可访问性。我喜欢在我的功能之后将这些信息放在课程的最后。

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

这样做很重要,因为它使人们使用您的代码更轻松。他们不必猜测不同房产来自哪里或为什么他们在那里。另外,大多数(如果不是全部的话)IDE都不会在类变量上使用,除非你已经将它们声明在某个地方。代码完成/提示是IDE的许多好处之一,如果没有声明变量,则会使该功能无用。

0

Federico Culloca说:“这个变量不是未初始化的,它只是未声明的”。此外,您没有为它们定义任何访问修饰符,以便它们的行为类似于应用于它们的public修饰符。

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

您应该对类级变量使用专用修饰符,并为它们提供访问器和增量器方法(Getters和Setter)。

相关问题