[英]Appropriate use case of __get in daily life programming
我正在學習OOP和PHP。 下面是我實現__get方法的方式。 它工作正常,但我不明白為什么要使用它。 因為在我的示例中,我故意將屬性設置為protected,所以無法通過外部類訪問。 那么__get then的目的是什么?
class Magic {
protected $name = 'John';
public $age = 26;
public $new_name;
public function __get($key){
$this->new_name = $key;
}
public function get_new_name(){
return $this->new_name. " is my friend";
}
}
$person = new Magic();
$person->Alan;
echo $person->get_new_name();
例如,您可以使用__get方法獲取數組的值。 在這種情況下,您可以具有動態數量的類變量。
public function __get($key){
return $this->property[$key];
}
沒有合理的理由讓我想到您可以將__get()
與受保護的字符串一起使用,受保護的數組將很有用,但對字符串沒有幫助。 您提供的示例有效,但它並不是讓其他人理解或與IDE(代碼編輯器)一起使用的最佳代碼。
由於您似乎不明白我在說什么,因此這里有一個快速數據庫腳本的示例。
假設您要使用類似ORM的類在數據庫中插入一行。 您將執行以下操作:
Class Person {
protected $fields = array();
public function setField($name, $value) {
$this->fields[$name] = $value;
}
public function getField($name) {
return $this->fields[$name];
}
public function save() {
Database::insert($table, $fields); // Generic function to insert the row, don't worry about this.
}
}
現在,在這種情況下,您可以執行以下操作:
$person = new Person();
$person->setField('name', 'Bob');
$person->setField('age', '30');
$person->save();
echo $person->getField('name'); // Echoes Bob
現在要更改此設置,我們可以使用__set()
而不是setField()
和__get()
而不是getField()
__get()
:
Class Person {
protected $fields = array();
public function __set($name, $value) {
$this->fields[$name] = $value;
}
public function __get($name) {
return $this->fields[$name];
}
public function save() {
Database::insert($table, $fields);
}
}
現在,在這種情況下,您可以執行以下操作:
$person = new Person();
$person->name = 'Bob';
$person->age = '30';
$person->save();
echo $person->name; // Echoes Bob
希望這為您提供了一個有關過載如何工作的簡單示例。 我們不想聲明屬性$name
和$age
因為我們想使用這些屬性來構建$fields
數組,該數組隨后將在插入中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.