我一直在寻找一段时间,但我找不到答案,这两种在PHP中使用变量类的方式有什么区别?:(如果有的话)
class MyClass
{
private $myVariable='something';
public function __construct()
{
}
}
class MyClass
{
private $myVariable;
public function __construct()
{
$this->myVariable='something';
}
}
答案 0 :(得分:3)
答案 1 :(得分:2)
查看此方案:
class Parent {
protected $property1; // Not set
protected $property2 = '2'; // Set to 2
public function __construct(){
$this->property1 = '1'; // Set to 1
}
} // class Parent;
class Child extends Parent {
public function __construct(){
// Child CHOOSES to call parent constructor
parent::__construct(); // optional call (what if skipped)
// but if he does not, ->property1 remains unset!
}
} // class Child;
这是两个电话之间的区别。 parent :: __ construct()对于从父级继承的子类是可选的。所以:
is_scalar()
)属性,请在类定义中执行此操作确保它们也存在于子类中。这完全取决于您如何设计代码的功能。
这里没有错,这只适合你。
答案 2 :(得分:1)
如果不选择在构造函数中初始化变量,则只能使用常量值。这是一个小例子:
define('MY_CONSTANT', 'value');
class MyClass
{
// these will work
private $myVariable = 'constant value';
private $constant = MY_CONSTANT;
private $array = Array('value1', 'value2');
// the following won't work
private $myOtherVariable = new stdClass();
private $number = 1 + 2;
private $static_method = self::someStaticMethod();
public function __construct($param1 = '')
{
$this->myVariable = $param1;
// in here you're not limited
$this->myOtherVariable = new stdClass();
$this->number = 1 + 2;
$this->static_method = self::someStaticMethod();
}
}
请查看本手册页,了解哪些值可以直接与属性相关联:http://php.net/manual/en/language.oop5.properties.php
可能会有更多差异......
答案 3 :(得分:1)
我喜欢这样做有点像第二种方式来促进延迟加载。声明成员变量时我将设置的简单值。
class WidgetCategory
{
/** @var array */
private $items;
/**
*
* @return array
*/
public function getItems()
{
if (is_null($this->items)) {
$this->items = array();
/* build item array */
}
return $this->items;
}
}