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

php中文网
发布: 2016-06-13 12:20:42
原创
1075人浏览过

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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号