2

一旦类被初始化,有没有办法从一个类中调用所有方法?例如,假设我有一个名为的类todo,一旦我创建了一个todo类的实例,它里面的所有方法/函数都将被执行,而不是在构造函数中调用它?

<?php 
    class todo 
    {
        function a()
        {
        }
        function b()
        {
        }
        function c()
        {
        }
        function d()
        {
        }
    }

    $todo = new todo();
?>

在这里,我创建了一个类的实例,以便todo执行方法a, b, 。这可能吗?cd

4

6 回答 6

7

这输出'abc'。

class Testing
{
    public function __construct()
    {
        $methods = get_class_methods($this);

        forEach($methods as $method)
        {
            if($method != '__construct')
            {
                echo $this->{$method}();
            }
        }
    }

    public function a()
    {
        return 'a';
    }

    public function b()
    {
        return 'b';
    }

    public function c()
    {
        return 'c';
    }
}
于 2012-09-05T06:22:01.060 回答
2

我认为您可以使用迭代器。所有方法都将在 foreach PHP Iterator中调用

于 2012-09-05T06:10:27.310 回答
1

我从 php.net 复制并粘贴到下面的类...

我认为这会很有用,因为不使用对象调用方法,而是使用 get_class_methods():

class myclass {
    function myclass()
    {
        return(truenter code heree);
    }

    function myfunc1()
    {
        return(true);
    }

    function myfunc2()
    {
        return(true);
    }
}

$class_methods = get_class_methods('myclass');
foreach ($class_methods as $method_name) {
    echo "$method_name\n";
}
于 2012-09-05T06:51:49.130 回答
1

使用__construct()在对象实例化时调用的方法(如您所述)。其他任何事情都是不熟悉和出乎意料的(让随机方法立即执行而不是由构造函数)。

您的类代码看起来像是在使用 PHP4,如果是这种情况,请将您的构造函数命名为与类名相同。

于 2012-09-05T05:59:50.037 回答
1

像这样?我有时使用这种模式来注册有关类的元数据。

<?php
class todo {
    public static function init() {
        self::a();
        self::b();
        self::c();
        self::d();
    }
    function a()
    {
    }
    function b()
    {
    }
    function c()
    {
    }
    function d()
    {
    }
}

todo::init();
于 2012-09-05T05:59:57.770 回答
1

除了按照您在问题中建议的那样将其放入构造函数中之外,我想不出任何方法:

<?php 
    class todo 
    {
        public function __construct()
        {
            $this->a();
            $this->b();
            $this->c();
            $this->d();
        }
        function a()
        {
        }
        function b()
        {
        }
        function c()
        {
        }
        function d()
        {
        }
    }

    $todo = new todo();
?>
于 2012-09-05T06:00:12.247 回答