【问题标题】:Calling __construct from child class statically(?)从子类静态调用__construct(?)
【发布时间】:2016-04-05 13:50:01
【问题描述】:
我有以下 php 代码:
<?php
class ParentClass {
public $table_name;
function __construct() {
$this->table_name = strtolower(__CLASS__);
}
}
class ChildClass extends ParentClass {
function __construct() {
parent::__construct();
//And I also want to put here other codes
}
}
$parent = new ParentClass();
$child = new ChildClass();
echo $parent->table_name . "<br />" . $child->table_name;
?>
结果是
parentclass
parentclass
我希望它是这样的
parentclass
childclass
我如何实现它?
后期静态绑定可以解决我的问题,但是当然不能静态调用。
http://php.net/manual/en/language.oop5.late-static-bindings.php
【问题讨论】:
标签:
php
inheritance
constructor
【解决方案1】:
这适用于 PHP5.5 及更高版本:
class ParentClass
{
public $table_name;
public function __construct()
{
$this->table_name = strtolower(static::class);
}
}
class ChildClass extends ParentClass
{
public function __construct()
{
parent::__construct();
// ...
}
}
$parent = new ParentClass();
$child = new ChildClass();
echo $parent->table_name . "<br />" . $child->table_name;
有关参考,请参阅http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class。
【解决方案2】:
使用static::class 获取使用后期静态绑定的类的名称:
class ParentClass {
public $table_name;
function __construct() {
$this->table_name = strtolower(static::class);
}
}
这将导致所需的
parentclass
childclass
【解决方案3】:
<?php
class ParentClass {
public $table_name;
function __construct() {
$this->table_name = strtolower(__CLASS__);
}
}
class ChildClass extends ParentClass {
function __construct() {
parent::__construct();
$this->table_name = strtolower(__CLASS__);
//And I also want to put here other codes
}
}
$parent = new ParentClass();
$child = new ChildClass();
echo $parent->table_name 。 “
”。 $child->table_name;
?>