我可以在构造函数中为属性赋值,而不使用例如外部函数定义任何参数吗?
实施例
function my_external_function() {
return 'Good Morning World';
}
class MyClass {
protected $_my_property;
public function __construct() {
$this->_my_property = my_external_function() != '' ? my_external_function() : 'Good night World!';
}
public function getOtherMethod() {
return $this->_my_property;
}
}
$obj = new MyClass();
echo $obj->getOtherMethod();
答案 0 :(得分:1)
是的,但你最好避免这种棘手的依赖。
答案 1 :(得分:1)
你可以这样做。您的问题中的代码可以使用,但这种方法存在问题。
如果以这种方式编写类,它将始终依赖于该外部函数,但它无法控制它是否存在,更不用说它是否会返回构造函数可以使用的值。如果您移动,重命名或修改外部函数,它可能会以不可预测的方式改变您的类的行为。
我会推荐这样的东西,我认为可以完成你想要完成的任务(不确定),而不会强迫你的班级盲目地依赖外部功能。
class MyClass {
protected $_my_property = 'Good night World!'; // set a default value here
public function __construct($x = null) { // give your constructor an optional argument
if ($x) { // use the optional argument if it's provided
$this->_my_property = $x;
}
}
public function getOtherMethod() {
return $this->_my_property;
}
}
您仍然可以创建没有参数的类的实例
$obj = new MyClass();
当您致电$obj->getOtherMethod();
时,您将获得默认值。
您仍然可以使用外部功能;只是让它将其值传递给对象的构造函数,而不是在构造函数中使用它。
$obj = new MyClass(my_external_function());