4
我有一個抽象類來擴展類以提供基本的orm函數。它提供的所有功能都受到類的保護,因此它可以決定將哪些字段公開提供給外部對象。但最近,我已經開始使用一些不需要如此複雜的小型數據類,並且可以從公開的orm編輯功能中獲益,而且不需要特殊的功能。更改PHP類函數的隱私範圍
由於函數的命名約定是充分和緊湊的,是否有方法將現有函數更改爲public(不需要相同的類或臨時擴展),還是必須使用新的traits
功能的PHP添加一個現有的類,它包含作爲內部保護功能的抽象層的公共版本的功能?
編輯:
對於性狀的方法,我在想,這將有助於這樣的:
abstract class ORMClass {
public function __construct($pk) {}
protected function __get($k) {}
protected function __set($k,$v) {}
protected function save() {}
}
trait publicORM {
public function __get($k) { return parent::__get($k); }
public function __set($k,$v) { return parent::__set($k,$v); }
public function save() { return parent::save(); }
}
class myOrm extends ORMClass {
use publicORM;
protected static $table = 'myTable';
}
這樣的話,我可以用myOrm
像:
$myOrm = new myOrm(1);
$myOrm->foo = 'alice'
echo $myOrm->bar;
$myOrm->save();
而不需要:
public function __get($k) { return parent::__get($k); }
public function __set($k,$v) { return parent::__set($k,$v); }
public function save() { return parent::save(); }
要在課程中列出myOrm
因此,您有一個受保護方法的類,並且在外部,您想修改該類以將其某些方法從protected更改爲public? – rid
簡而言之,這就是它 – topherg
我認爲你提到的臨時類方法會變得最好。創建另一個抽象類來擴展您的基礎,但具有公共訪問器,並且當您需要該行爲時子類THAT。 – grossvogel