1

javascript(jquery)で行うのと同じように、これがphpクラスオブジェクトで可能かどうか疑問に思います。

jqueryでは、私はそうします、

(function($){


    var methods = {

    init : function( options ) {
       // I write the function here...  

    },

    hello : function( options ) {

           // I write the function here...  
        }
     }

    $.fn.myplugin = function( method ) {

    if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );  
        } else {
            $.error( 'Method ' +  method + ' does not exist.' );
        }
        return this; 
    };
})(jQuery);

したがって、 内で関数を呼び出したい場合は、次のmypluginようにします。

$.fn.myplugin("hello");

それで、クラスを書くようになったときに、phpでもこれを行う方法があるのではないかと思いましたか?

$method = (object)array(
"init" => function() { 
   // I write the function here...   
}, 
"hello" => function() { 
 // I write the function here...    

} 
);

編集:

こんなクラスでもいいの?

class ClassName {

    public function __construct(){
    //
    }

    public function method_1(){

        $method = (object)array(

            "init" => function() { 
               // I write the function here...   
            }, 
            "hello" => function() { 
             // I write the function here...    

            } 
        );

    }


    public function method_2(){

        $method = (object)array(

            "init" => function() { 
               // I write the function here...   
            }, 
            "hello" => function() { 
             // I write the function here...    

            } 
        );

    }

}
4

3 に答える 3

2

あなたの関数は、PHP のマジック関数に$.fn.myplugin非常に似ています。__call()ただし、クラスで定義してロジックをエミュレートする必要があります。

class Example {
    private $methods;

    public function __construct() {
        $methods = array();
        $methods['init'] = function() {};
        $methods['hello'] = function() {};
    }

    public function __call($name, $arguments) {
        if( isset( $methods[$name])) {
            call_user_func_array( $methods[$name], $arguments);
        } else if( $arguments[0] instanceof Closure) {
            // We were passed an anonymous function, I actually don't think this is possible, you'd have to pass it in as an argument
            call_user_func_array( $methods['init'], $arguments);
        } else {
            throw new Exception( "Method " . $name . " does not exist");
        }
    }
}

次に、次のようにします。

$obj = new Example();
$obj->hello();

テストされていませんが、うまくいけばそれは始まりです。

于 2013-08-02T15:54:36.457 に答える
0
class ClassName {

    public function __construct(){
    //this is your init
    }

    public function hello(){
    //write your function here
    }

}

あなたがそれを書く方法です

それから

$a =  new ClassName()

$a->hello();

それを呼び出す

于 2013-08-02T15:05:57.470 に答える