使用外部函数

时间:2016-05-23 21:09:04

标签: php parameters constructor construct

我可以在构造函数中为属性赋值,而不使用例如外部函数定义任何参数吗?

实施例

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();

2 个答案:

答案 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());