- class foo {
- function __call($name,$arguments) {
- print("Did you call me? I'm $name!
"); - print_r($arguments);
- print("
"); - }
-
- function doSecond($arguments)
- {
- print("Right, $arguments!
"); - }
- }
-
- $test = new foo();
- $test->doFirst('no this function');
- $test->doSecond('this function exist');
- ?>
__call 实现“过载”动作
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。
例:使用 __call 实现“过载”动作
- class Magic {
- function __call($name,$arguments) {
- if($name=='foo') {
- if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
- if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
- }
- }
-
- private function foo_for_int($x) {
- print("oh an int!");
- }
- //by bbs.it-home.org
-
- private function foo_for_string($x) {
- print("oh a string!");
- }
- }
-
- $test = new Magic();
- $test->foo(3);
- $test->foo("3");
- ?>
2、__set 和 __get的用法
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
例: __set 和 __get
- class foo {
- function __set($name,$val) {
- print("Hello, you tried to put $val in $name
"); - }
-
- function __get($name) {
- print("Hey you asked for $name
"); - }
- }
-
- $test = new foo();
- $test->__set('name','justcoding');
- $test->__get('name');
- ?>
在php编程中,尤其是php面向对象编程中,灵活应用__call、__set 和 __get,可以收到意外的惊喜,建议大家牢固掌握。 |