2009-09-12 133 views
0

昨天我有几个关于OO和PHP here中的类的问题,但我有几个新问题。关于PHP中OO的问题继续

1a)
在下面的示例代码片段中,您将看到3个变量设置在类的顶部,然后用于类中的方法。请注意,在开始声明的3变量没有被设置为任何东西,那么是否需要设置/列出类将在顶部使用的所有变量?

1b)或者他们只是在顶部调用,以设置它们被保护/私人/公共?

1c)是否总是需要设置一个这样的变量,假设所有的变量都是公开的,您是否还需要在开始时设置它们?

<?PHP 
class widget{ 
    private $name; 
    public $price; 
    private $id; 

    public function __construct($name, $price){ 
     $this->name = $name; 
     $this->price = floatval($price); 
     $this->id = uniqid(); 
    } 
} 
?> 

回答

2

类声明中而不是在方法中声明的变量是“成员变量”这个类的 - 他们将范围限定在只类,但可用于该对象的所有方法,以及一套新的每个将为每个对象实例创建。

$a = new widget("first", 0.1); 
$b = new widget("second", 0.2); 

echo $a->price; // will echo 0.1 
echo $b->price; // will echo 0.2 
echo $price; // will not echo anything unless you set $name to something elsewhere 

echo $name; // will not echo anything unless you set $name to something elsewhere 
echo $a->name; // will give you an error since 'name' is private to the class 
1

如果要设置变量的范围,则需要像上面那样在类声明中声明它。如果你只是希望变量有一个公共的范围,你可以通过简单地利用设置在即时方法中:

$this->variable_name = "value"; 

以那种方式声明的变量将在类中的任何方法可用以及任何子类(扩展此类的类)中的任何方法。