コメントで述べたように、これを静的プロパティとして指定すると、クラスのオブジェクトのインスタンスではなく、プロパティがクラスに属します。クラス プロパティclassname::$propertyName
にアクセスするには、プロパティへのアクセスに使用する必要があります。
おそらくあなたがしようとしていることは次のとおりです。
class db extends mysqli {
protected static $instance;
public $bar;
private function __construct() {
$this->bar = "test";
}
public static function getInstance(){
if (!isset(static::$instance)){
static::$instance = new static();
}
return static::$instance;
}
}
$link = db::getInstance();
echo $link->bar;
アップデート
あなたが抱えている問題を見ると、拡張可能な共有 db オブジェクトへのグローバル アクセスを提供しようとしているだけだと思います。その場合は、mysqli インスタンスを拡張するのではなく、ラッパーを提供することでより良いマイレージを得ることができます。これを行う簡単な方法は、内部に格納されたオブジェクトへのすべての未定義のプロパティ アクセスをプロキシするラッパー オブジェクトを作成することです。
class db {
protected $db;
public $bar;
protected static $instance;
protected function __construct(){
$this->db = new mysqli (....);
$this->bar = "something";
}
public static function getInstance(){
if(!isset(static::$instance)){
static::$instance = new static();
}
return static::$instance();
}
// magic accessor proxy
public function __get($property){
return $this->db->$property;
}
// magic mutator proxy
public function __set($property, $value){
$this->db->$property = $value;
}
// magic call function
public function __call($method, $args){
return call_user_func_array(array($this->db, $method), $args);
}
public function __callStatic($method, $args){
return call_user_func_array(array(static::getInstance(), $method), $args);
}
}