我有以下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
这适用于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.
使用static::class
获取使用后期静态绑定的类的名称:
class ParentClass {
public $table_name;
function __construct() {
$this->table_name = strtolower(static::class);
}
}
这将产生所需的
parentclass
childclass
<?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;
?>