php oop类调用内部函数

时间:2011-06-06 22:57:42

标签: php oop class

所以我有一个包含基本内容的课程,比如

Class Test{
   public function wheels(){
        echo 'wheels';
   }
}

和另一个

Class Test2{
   public function bikes(){
       $test = new Test();
       return 'i am a bike with '.$test;
   }
}

所以我的问题是,如果我在函数内部需要不同的类,那么调用它就像$ var = new ClassName();

还是有更好的方法在类函数中调用不同的类?

6 个答案:

答案 0 :(得分:2)

不,这样做很好。我能给你的唯一建议是分配这样的变量:

$modelClass = new ModelClass();

但您需要将商家信息更改为:

Class Test{
   public function wheels(){
        return 'wheels';
   }
}

Class Test2{
   public function bikes(){
       $test = new Test();
       return 'i am a bike with '.$test->wheels();
   }
}

答案 1 :(得分:1)

对于您的webapp,请编写一个自动加载器,它只是在您需要时从您要使用的文件中加载所有类。

然后,您可以只编写代码,而不需要在类之间构建复杂的继承,因为您想要使用已编码的功能。

这有多重好处:

  1. 即使没有OOAD的经验,你也可以通过而不是在多个类之间引入很多关系来保持彼此之间的区别。类之间的关系可能很糟糕,因为当不需要时,你可以使事物彼此可靠。
  2. 您可以轻松扩展和更改您的应用程序。无论是现在还是以后,这都很重要。
  3. 那只是我的2美分。如果您以后不喜欢自动加载器,也可以更改它。但它有助于让事情顺利进行。

    示例:

    function my_autoloader_function($name) {
        require(sprintf('%s/%s.php', $yourlibfolderdir, $name));
    }
    spl_autoload_register('my_autoloader_function');
    // [...] (even in other files)
    $obj = new Test5;
    $obj->funcZalabri();
    

    每次实例化/访问类时,都会调用注册的自动加载器函数,但不存在。在示例中,假设每个文件有一个类是非常常见的,在我看来管理代码非常好。

    由于自动加载器是一个回调函数,并且它是用PHP编写的,因此您可以在其中执行任何操作并使其更加详细,以满足您的需求。

    希望这有帮助。

答案 2 :(得分:0)

这是OO中的常规做法,而不仅仅是PHP。如果您需要的$test不仅仅是Test2.bikes(),那么您应该将其声明为Class Test2的全局变量。

答案 3 :(得分:0)

您的代码当然是合法的(除了需要调用$test->wheels作为Tomasz的命令)然而,对于许多OOP语言,您在构造函数中指定内容,然后在方法调用中使用它们:

Class Test2{
   private $test;

   function __construct($test) {
       $this->test = $test;
   }
   public function bikes(){
       return 'i am a bike with '.$this->test->wheels();
   }
}

如果您想动态更换车轮,情况尤其如此。

答案 4 :(得分:0)

通常这样做。虽然,如果您需要在类中的其他函数中使用新类,您可能希望在函数外部实例化一次,而不是每次都创建一个新对象。

答案 5 :(得分:0)

这取决于您需要的课程,您需要的课程以及您需要的课程。如果您需要一份新的副本,每次该功能运行时,您可能希望按照自己的方式进行。如果您不需要新副本(这就是您正在做的事情,如果您需要干净的副本,那么您正在执行正确 !!),但只是需要访问一些独立的方法,你可以考虑让子类成为你的类的子元素。

例如,如果你正在做一个更.net风格的OOP,你可以有这样的东西。哪种都有OOP风格。我意识到这不是表示DOM的有效或正确的方法,但这只是一个例子。

class Entity
{
    private $children = array();

    public addChild(Entity $entity) { ... }
    public getChild($index) { ... }
    public removeChild($index) { ... }

}

class Text : Entity //this is inheritence
{
    private $text;

    public setText($text) { ... }
    public getText() { ... }
}

class Attributable : Entity
{
    protected $attributes = array();

    public setAttribute($key, $value) { ... }
    public clearAttribute($key) { ... }
    public getAttribute($key) { ... }
}

class Option : Attributable
{  
    public $text = new Text(); //this is a child element
}

class Select : Attributable
{
    portected $options = array();

    public addOption(Option $entity) { ... }
    public getOption($index) { ... }
    public removeOption($index) { ... }
}