class Person { public void say() { System.out.println("我能说话"); } public void say(String name) { System.out.println("我叫" + name); } public void say(String name, int age) { System.out.println("我叫" + name + ",今年" + age + "岁"); } } Person person = new Person(); person.say(); // 说话 person.say("李明"); // 我叫李明 person.say("李明", 60); // 我叫李明,今年60岁
class Person { public function __call($name, $arguments) { if ($name == 'say') { $argNum = count($arguments); switch ($argNum) { case 0: echo '我在说话'; break; case 1: echo '我叫' . $arguments[0]; break; case 2: echo '我叫' . $arguments[0] . ',今年' . $arguments[1] . '岁'; break; default: echo '没有找到方法'; break; } } } } $person = new Person(); $person->say(); $person->say('李明'); $person->say('李明', 666); 与 __call() 方法相对应的就是 __callStatic() 方法,__callStatic() 方法是在调用了不存在或者没有访问权限的静态方法时才会被调用。将上面的代码用 __callStatic() 方法实现。 class Person { public function __call($name, $arguments) { if ($name == 'say') { $argNum = count($arguments); switch ($argNum) { case 0: echo '我在说话'; break; case 1: echo '我叫' . $arguments[0]; break; case 2: echo '我叫' . $arguments[0] . ',今年' . $arguments[1] . '岁'; break; default: echo '没有找到方法'; break; } } } public static function __callStatic($name, $arguments) { if ($name == 'say') { $argNum = count($arguments); switch ($argNum) { case 0: echo '我在说话'; break; case 1: echo '我叫' . $arguments[0]; break; case 2: echo '我叫' . $arguments[0] . ',今年' . $arguments[1] . '岁'; break; default: echo '没有找到方法'; break; } } } } Person::say(); Person::say('李明'); Person::say('李明', 666);
站点统计
留言咨询