2
A
回答
0
不,沒有像公共方法__call
這樣的機制。但__call()
已經是你要找的。如果你嘗試的例子
class A {
protected $value;
/**
* Enables caller to call a defined set of protected setters.
* In this case just "setValue".
*/
public function __call($name, $args) {
// Simplified code, for brevity
if($name === "setValue") {
$propertyName = str_replace("set", "", $name);
}
// The desired method that should be called before the setter
$value = $this->doSomethingWith($propertyName, $args[0]);
// Call *real* setter, which is protected
$this->{"set$propertyName"}($value);
}
/**
* *Real*, protected setter
*/
protected function setValue($val) {
// What about validate($val); ? ;)
$this->value = $val;
}
/**
* The method that should be called
*/
protected function doSomethingWith($name, $value) {
echo "Attempting to set " . lcfirst($name) . " to $value";
return trim($value);
}
}
:
$a = new A();
$a->setValue("foo");
...你會得到以下輸出:
我將定義使用__call
「僞公開」 界面
Attempting to set value to foo
相關問題
- 1. 如何在Clojure中調用公共類的非公共方法?
- 2. 如何在JavaScript中調用當前對象的公共方法?
- 3. 如何在調用方法之後和方法調用之前運行方法?
- 4. PHP限制調用公共方法
- 5. 調用公共方法
- 6. 如何在私有屬性中調用公共方法?
- 7. 所有活動的公共方法
- 8. 調用片段中的公共方法
- 9. 如何在聲明之前訪問公共方法?
- 10. 如何在類中的服務中調用公共方法
- 11. Rhino Mocks驗證私有方法是從公共方法調用
- 12. 從公共方法調用私有方法?
- 13. 與方法公共方法與私有
- 14. 在WAP上調用公共方法
- 15. 調用公共方法中的方法與此指針
- 16. 如何聲明公共方法和私有方法在JavaScript
- 17. 如何在其他方法之前調用方法
- 18. 如何在trait方法調用之前添加方法?
- 19. 公共方法
- 20. ASP.NET Web API--在路由方法之前爲所有請求調用的方法?
- 21. 如何在私有方法和公共方法之間連接變量
- 22. 如何在公共方法中使用私有方法來檢查有效性?
- 23. 如何在Eclipse中查看所有方法調用的方法以及所有調用方法
- 24. 調用Windows服務的公共方法
- 25. 調用公共方法的jquery插件
- 26. 定義所有公共方法或原型個別方法?
- 27. 如何從* .dll中檢索所有公共方法
- 28. 如何在調用方法之前將方法稱爲被動方法
- 29. 每次調用任何其他方法之前調用方法
- 30. C#:無法訪問私有方法中的公共方法
還有其他的一些方法嗎? – Hydroid 2013-05-09 18:21:24
我想修改setter方法中的所有參數 – 2013-05-09 18:22:12
與其他一些語言一樣,PHP沒有過濾前後的功能。一些PHP框架提供了這個功能,但是在他們不在的時候,你將不得不使用包裝器方法來實現你的目標。 – 2013-05-09 18:26:46