在多个类中使用方法

时间:2016-11-10 05:18:02

标签: php oop

我有一个在多个类中使用的特定方法。这里的问题是,如果我想在方法中进行更改,我还需要在其他类中复制它。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

根据您的问题,您似乎正在寻找一种在多个类中使用代码的智能方法。我认为Traits对你来说是个不错的选择。您可以在php官方文档中找到详细信息:Traits

  

Traits是单继承语言中代码重用的一种机制   比如PHP。特质旨在减少单身的一些限制   通过使开发人员可以自由地重用方法集来继承   几个独立的班级生活在不同的阶级等级。

答案 1 :(得分:2)

答案是"它取决于"。在这种情况下,它取决于方法的目的,应用程序的设计等。

正如Mahfuzel指出的那样,一种方法是使用特征:

<?php

class MyClass {
    use MyTrait;
}


trait MyTrait {

    public function greeter($name){
        echo "Hello $name";
    }
}


$myObj = new MyClass();
$myObj->greeter("user2650277"); // Hello user2650277

这基本上是一个愚蠢的&#34;将特质代码导入您的班级。我将它用作接口实现的一种&#34;接口实现&#34;在类中:特征定义了您的类所需的特定附加行为。如果你的方法可以这样考虑,那么特征很容易。

如果你的方法只是一个辅助函数,那么可能会把它放在自己的类中,并使它成为静态的:

<?php

class MyClass {

    public function myMethod($name){
        MyOtherClass::greeter($name);
    }

}

class MyOtherClass {

    public static function greeter($name){
        echo "Hello $name";
    }
}

$myObj = new MyClass();
$myObj->myMethod("user2650277"); // Hello user2650277

或许你的方法有自己的状态,应该只是该类的方法,而不是静态函数:

<?php

class MyClass {

    public function myMethod($name){
        $otherClass = new MyOtherClass($name);
        $otherClass->greeter();
    }

}

class MyOtherClass {

    private $name;

    public function __construct($name){
        $this->name = $name;
    }

    public function greeter(){
        echo "Hello {$this->name}";
    }
}

$myObj = new MyClass();
$myObj->myMethod("user2650277"); // Hello user2650277

(显然你可能想要使用依赖注入,而不是直接在MyOtherClass的代码中创建MyClass的实例,但这与你的问题的范围有关。

我故意不在此处包含另一个选项:创建基类,将方法提升到其中,并使MyClass(以及需要该函数的其他类)扩展它。这几乎肯定是错误的方法,因为继承层次结构不太可能满足&#34; MyClass IS A MyBaseClass&#34;如果您正在使用继承,它必须做什么。 MyClass不仅仅是因为想要使用潜在基类的方法而在设计意义上成为另一个的子类。那个可怜的OO。一般来说,坚持使用addage&#34;赞成组合优于继承&#34;,以上所有选项都可以。

不要只选择最简单的解决方案来输入...考虑应用的架构,并实施相应的解决方案。

如果您需要澄清任何内容,请告诉我。

答案 2 :(得分:0)

对大型项目的特性有经验,我建议对它们非常谨慎并明智地使用它们。特质冲突不是一种非常愉快的体验。

因此,我倾向于使用静态方法,继承甚至代码重复而不是特征,尽管后者对于特定目的确实非常有用。

从它的声音来看,使用static函数可以解决你的问题。