2

クラスが初期化されたら、クラスからすべてのメソッドを呼び出す方法はありますか? たとえば、名前の付いたクラスがあり、クラスtodoのインスタンスを作成するとtodo、コンストラクターで呼び出さずに、その中のすべてのメソッド/関数が実行されるとしましょう。

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

    $todo = new todo();
?>

ここでは、todoメソッド、、、、が実行されるようaに、クラスのインスタンスを作成しました。これは可能ですか?bcd

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 に答える