我试图确保我理解PHP类的默认行为。如果没有指定函数调用,那么类会自动按顺序执行公共函数吗?
解释
我正在使用我没有创建的PHP类。设置了许多私有变量,后跟__construct
函数,它是公共的。
__construct
中没有明确调用另一个函数。它将外部配置与Class config合并。
下一个公共函数称为generateOutput()
。没有显式调用该函数,但根据我的输出日志,它是下一个执行的函数。
我只是想确定我理解订单并且不确定公共功能会自动执行。我一直认为__construct
只是因为它有一个特定的名称。
答案
从php片段中需要一次外部类文件,并创建新的类实例。该片段返回该函数的输出。
require_once($classfile);
try{
$handler = new EasyPoll($config,$lang);
return $handler->generateOutput(); //BINGO!
}
感谢您的帮助。它绝对让我的脑袋直线了!
答案 0 :(得分:1)
这个类是继承自另一个吗?在那种情况下可能有意义,因为扩展类不是调用generateOutput()
,而是父类是(并且你没有覆盖那种行为)。
答案 1 :(得分:1)
必须有一些你没有注意到的东西。创建类时,没有(默认情况下)调用除__construct
之外的方法。但是,请考虑以下情形:
class A {
private $b = null;
public function __construct() {
$this->x = new B($this);
}
public function fn() {
echo "HA!<br />\n";
}
}
class B {
public function __construct(A $owner) {
$owner->fn();
}
}
//Code:
$a = new A(); //Outputs "HA!"
我想要证明的是,你没有写的代码可能是模糊不清的,并且做了许多 magic 。
另一个可能性:
class A {
private $b = null;
public function __construct() {
$this->fn();
}
public function fn() {
echo "HA!<br />\n";
}
}
class B extends A {
public function __construct() {
parent::__construct();
}
}
//And the execution:
$b = new B(); //Again outputs A