> 백엔드 개발 > PHP 튜토리얼 > PHP对象新增方法的有关问题

PHP对象新增方法的有关问题

WBOY
풀어 주다: 2016-06-13 12:20:42
원래의
911명이 탐색했습니다.

PHP对象新增方法的问题
很普通的写法:

<br /><br />class MyClass<br />{<br />     funciton a(){<br />       echo 'a';<br />     }<br />}<br /><br /><br />class MyClassExted extends MyClass<br />{<br />     function b(){<br />          echo 'b';<br />     }<br />}<br /><br />$test = new MyClassExted();<br />$test->b();<br /><br /><br />
로그인 후 복사


因为一些原因,我希望使用的时候可以是这样的:
<br /><br />$test = new MyClass();<br />$test->b();<br /><br />
로그인 후 복사



就“好像”是这样:


class MyClass
{
funciton a(){
echo 'a';
}
}


class MyClass extends MyClass
{
function b(){
echo 'b';
}
}<br /><br />$test = new MyClass();<br />$test->b();<br /><br />
로그인 후 복사


但这显示不对的,新extends的类名必须与父类不同,那么问题来了?

有什么办法可以直接对一个类新增一个方法吗?

------解决思路----------------------
没有这种写法,类名不能重复定义
为什么不在MyClass类里面写方法b() 呢,MyClassExted?继承 MyClass后,可以重写MyClass 的方法b()
<br />class MyClass<br />{<br />     function a(){<br />       echo 'a';<br />     }<br />	 function b(){<br />       echo 'MyClass b';<br />     }<br />}<br />class MyClassExtend extends MyClass<br />{<br />     function b(){<br />          echo 'MyClassExtend b';<br />     }<br />}<br /> <br />$MyClass = new MyClass();<br />$MyClass->b();//MyClass b<br /><br />$MyClassExtend = new MyClassExtend();<br />$MyClassExtend->b();//MyClassExtend b<br />
로그인 후 복사

------解决思路----------------------
你可以给类预留一个接口呀
class MyClass<br />{<br />     funciton a(){<br />       echo 'a';<br />     }<br /><br />     function __call($name, $param) {<br />        if(function_exists($name)) {<br />            return call_user_func_array($name, $param);<br />        }<br />     }<br />}<br /><br />function b() {<br />  echo $b;<br />}<br /><br />$test = new MyClass();<br />$test->b();<br />
로그인 후 복사

------解决思路----------------------
<br />class MyClass<br />{<br />     function a(){<br />       echo 'a';<br />     }<br /><br />     function __call($name, $param){<br />     	if($name=='b'){<br />     		echo 'b';<br />     	}<br />     }<br />}<br /><br />$obj = new MyClass();<br />$obj->b();<br />
로그인 후 복사

------解决思路----------------------
再给你个加强升级版
<br /><?php<br />class api_base<br />{<br />     function a(){<br />       echo 'a111';<br />     }<br />     function __call($name, $param) {<br />        static $methods = array();<br />        if(!method_exists($this, $name)){<br />            list($api, $fun) = explode('_',$name);<br />			empty($fun) && $fun = 'index';<br />			if(!isset($methods[$api])){<br />                include_once('class.api.'.$api.'.php');<br />                $method = 'api_'.$api;<br />                $methods[$api] = new $api();<br />            }<br />			if(!method_exists($methods[$api], $fun)){<br />				die('error');<br />			}<br />            call_user_func_array(array($methods[$api], $fun), $param);<br />        }<br />     }<br />}<br />  <br />$test = new api_base();<br />$test->b(1,2,3);<br />$test->b(4,5,6);<br /><br />$test->b_test(1,2,3);<br />$test->b_haha(4,5,6);<br />?><br />class.api.b.php:<br /><?php<br />class api_b extends api_base<br />{<br />     function index($a,$b,$c){<br />       echo "$a - $b - $c <br>";<br />     }<br />     function test($a,$b,$c){<br />       echo "$a - $b - $c <br>";<br />     }<br />	 function haha($a,$b,$c){<br />       echo "$a - $b - $c <br>";<br />     }<br />}<br />?><br />
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿