(構文を $Post::find(1); のようにすることも試みましたが、それはまったく別の、純粋に審美的な問題です)
スコープ解決演算子を使用する場合、静的メソッドや定数にアクセスしています。これらは、クラスのインスタンスではなくクラスで機能するメソッドです。例えば:
// the find method retuns a new Post instance and
// does not try to access $this
$post = Post::find(1);
配列から投稿用のオブジェクトを作成する場合は、独自のクラスを作成してそれに応じて入力するか、テーブル データをやPost
などの配列ではなくオブジェクトとして返すデータベース関数のいずれかを使用することをお勧めします。mysqli_result::fetch_object
mysql_fetch_object
独自の Post クラスを作成する場合は、データベース情報を配列に格納し__call()
、__get()
および__get()
Magic メソッドを使用してそのデータにアクセスできます。例えば:
class Post() {
protected $data;
public function __construct($data) {
$this->data = $data;
}
// access data with a getFoobar() style call
public function __call($name, $args) {
if (substr($name, 0, 3) == 'get') {
$key = strtolower(substr($name, 3));
if (array_key_exists($key, $this->data)) {
return $this->data[$key];
}
}
$class = get_class($this);
throw new Exception("Call to undefined method $class::$name");
}
// access data like a class property
public function __get($key) {
if (array_key_exists($key, $this->data)) {
return $this->data[$key];
}
throw new Exception("Attempt to access non-existant property $class::$name");
}
// set the data like a class property
public function __set($name, $value) {
$this->data[$name] = $value;
}
}