douhong4452 2014-06-26 12:09
浏览 65
已采纳

将行为方法合并到PHP类

Let's say i have the following behavior and standard class:

abstract class MyBehavior {
     function testFunction(){
         return 'test';
     }
}

class TestClass {
     var $use = array('MyBehavior');

     function __construct(){
         // do something to give me access to function testFunction through
         // $this->testFunction();
     }
}

$test = new TestClass();

As i commented, i would like the MyBehavior method to be available inside TestClass ($test->testFunction();) without "extending" the class...

Is this possible?

EDIT: Thanks for all the responses, I have my answer, or at least i need to know what my options are, so thanks! I can only give one right answer, so I'm going with the first response.

  • 写回答

4条回答 默认 最新

  • dongzhao8233 2014-06-26 12:12
    关注
    <?php
    
    trait MyBehavior {
    
        public function testFunction() 
        {
            return 'test';
        }
    
    }
    
    class TestClass {
    
        use MyBehavior;
    
        function __construct()
        {
            echo $this->testFunction();
        }
    
    }
    
    $test = new TestClass();
    

    You could use a trait to add your desired behavior to a class. Traits exist since PHP >= 5.4.0 and are a neat way to extend classes without actually making use of inheritance. But be careful:

    If misused, traits will be in your way more than they help you. Anthony Ferrera wrote a really good blogpost about the downsides of traits. So you should definitely give it a read.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?