2015-12-31 71 views
1

我有以下的PHP代碼(?):從子類中調用__construct靜態

<?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

+0

我可以知道你想達到什麼樣的? –

+0

是的,請重新閱讀我上面的問題。 – user3210615

回答

3

這個作品在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

1

使用static::class使用後期靜態綁定,以獲得類的名稱:

class ParentClass { 

    public $table_name; 

    function __construct() { 
     $this->table_name = strtolower(static::class); 
    } 

} 

這將導致所需

parentclass 
childclass 
0
<?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 
} 

} 

$父=新的父類(); $ child = new ChildClass();

echo $ parent-> table_name。 「
」。 $兒童安全> table_name的;

?>