将行为方法合并到PHP类

Tob*_*eek 2 php oop abstract

假设我有以下行为和标准类:

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();
Run Code Online (Sandbox Code Playgroud)

正如我评论的那样,我希望MyBehavior方法在TestClass($ test-> testFunction();)中可用,而不需要"扩展"类......

这可能吗?

编辑:感谢所有的回复,我有我的答案,或者至少我需要知道我的选择,所以谢谢!我只能给出一个正确的答案,所以我要回答第一个问题.

thp*_*hpl 6

<?php

trait MyBehavior {

    public function testFunction() 
    {
        return 'test';
    }

}

class TestClass {

    use MyBehavior;

    function __construct()
    {
        echo $this->testFunction();
    }

}

$test = new TestClass();
Run Code Online (Sandbox Code Playgroud)

您可以使用特征将所需行为添加到类中.自PHP> = 5.4.0以来存在特征,并且是在不实际使用继承的情况下扩展类的简洁方法.不过要小心:

如果误用,特质会比他们帮助你更多.安东尼费雷拉写了一篇关于特质缺点的非常好的博文.所以你一定要读一读.

  • 值得一提的是,Traits仅适用于PHP 5.4及更高版本. (2认同)