每次在类中运行方法时都会调用__construct方法吗?例如:
class SomeClass {
function __construct() {
// do something
}
function a() {
// do something for a
}
}
所以当我打电话给班级时
$class = new SomeClass();
我相信构造函数是运行的吗?但是当我做以下事情的时候怎么样:
echo $class->a();
此时构造函数是否再次运行?
答案 0 :(得分:5)
否。如上所述here:
具有构造函数方法的类在每个上调用此方法 新创建的对象,因此它适用于任何初始化 该对象在使用之前可能需要 。
最后,只有在创建对象时才会隐式调用构造函数。所以在你的例子中:
$class = new SomeClass();
// ^ triggers constructor
echo $class->a()
// ^ not triggering constructor but have to be initialized before usage
答案 1 :(得分:3)
正如名称“构造函数”应该建议的那样,只有在创建对象实例时才会隐式调用它,而不是每个方法调用,因此这里的答案是 NO 。
您可以在此处找到相关文档:http://php.net/manual/en/language.oop5.decon.php
正如ClémentMalet建议的那样,您可以通过在任何方法中添加$this->__construct();
来自行调用它!
如果您希望在不创建实例的情况下调用类的方法,则它必须是static
方法,请参阅http://php.net/manual/language.oop5.static.php
答案 2 :(得分:2)
答案是否。构造函数方法在类实例化时自动调用。
见这个例子:
<?php
Class Test{
public function __construct(){
echo "Construct called" . PHP_EOL;
}
public function a_method(){
echo "Running Method" . PHP_EOL;
}
}
$a = new Test();
$a->a_method();
输出:
中的更多信息构建名为
跑步方法
答案 3 :(得分:1)
否 ,不会再次调用构造函数方法(在方法调用中)。
例如,我们有以下代码;
<?php
class foo {
public function __construct() {
echo "Construct has been called". PHP_EOL;
}
public function a() {
echo "a has been called" . PHP_EOL;
}
}
//Now we have echo's within each method, when called, something will output.
$objFoo = new foo();
$objFoo->a();
__construct()
和a()
。
a()
当我们run the code时,我们得到以下输出;
构造被称为
a被称为
我们有2个单独的调用,明确__construct()
和a()
,只有2行输出 - 两者都是预期的,因为__construct()
仅被调用一次,所以不会有更多 - {{ 1}}。
查看文档;