当前位置: 代码迷 >> PHP >> PHP对象新增方法的有关问题
  详细解决方案

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

热度:72   发布时间:2016-04-28 17:22:19.0
PHP对象新增方法的问题
很普通的写法:



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


class MyClassExted extends MyClass
{
     function b(){
          echo 'b';
     }
}

$test = new MyClassExted();
$test->b();




因为一些原因,我希望使用的时候可以是这样的:


$test = new MyClass();
$test->b();




就“好像”是这样:


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


class MyClass extends MyClass
{
     function b(){
          echo 'b';
     }
}

$test = new MyClass();
$test->b();




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

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

------解决思路----------------------
没有这种写法,类名不能重复定义
为什么不在MyClass类里面写方法b() 呢,MyClassExted?继承 MyClass后,可以重写MyClass 的方法b()

class MyClass
{
     function a(){
       echo 'a';
     }
 function b(){
       echo 'MyClass b';
     }
}
class MyClassExtend extends MyClass
{
     function b(){
          echo 'MyClassExtend b';
     }
}
 
$MyClass = new MyClass();
$MyClass->b();//MyClass b

$MyClassExtend = new MyClassExtend();
$MyClassExtend->b();//MyClassExtend b

------解决思路----------------------
你可以给类预留一个接口呀
class MyClass
{
     funciton a(){
       echo 'a';
     }

     function __call($name, $param) {
        if(function_exists($name)) {
            return call_user_func_array($name, $param);
        }
     }
}

function b() {
  echo $b;
}

$test = new MyClass();
$test->b();

------解决思路----------------------

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

     function __call($name, $param){
      if($name=='b'){
      echo 'b';
      }
     }
}

$obj = new MyClass();
$obj->b();

------解决思路----------------------
再给你个加强升级版

<?php
class api_base
{
     function a(){
       echo 'a111';
     }
     function __call($name, $param) {
        static $methods = array();
        if(!method_exists($this, $name)){
            list($api, $fun) = explode('_',$name);
empty($fun) && $fun = 'index';
if(!isset($methods[$api])){
                include_once('class.api.'.$api.'.php');
                $method = 'api_'.$api;
                $methods[$api] = new $api();
            }
if(!method_exists($methods[$api], $fun)){
die('error');
}
            call_user_func_array(array($methods[$api], $fun), $param);
        }
     }
}
  
$test = new api_base();
$test->b(1,2,3);
$test->b(4,5,6);

$test->b_test(1,2,3);
$test->b_haha(4,5,6);
?>
class.api.b.php:
<?php
class api_b extends api_base
{
     function index($a,$b,$c){
       echo "$a - $b - $c <br>";
     }
     function test($a,$b,$c){
       echo "$a - $b - $c <br>";
     }
 function haha($a,$b,$c){
       echo "$a - $b - $c <br>";
     }
}
?>
  相关解决方案