0

オブジェクト クラスのインスタンス化に成功しましたが、関数の呼び出し方法がわかりません。ここに私のPHPコードがあります:

$obj = new router();
class router{

public function __construct(){
    if($_SERVER['REQUEST_METHOD'] == 'GET'){
        echo "GET";
        $page = 'index';
        $funct = 'myfuncempty';

        if (!empty ($_GET)){
            $page = $_GET['page'];
            $funct = $_GET['func'];
        }
        $obj = new $page(); //instantiating object with get from class
        $obj->funct;
    }
    else{
        echo "POST";
    }

}

}
class index{

public function __construct(){
    echo "hello I'm index";
}
public function myfunc(){
    echo "yo";
}

public function myfuncempty(){
    echo "empty get";
}
}

class login{
public function __construct(){
    echo "hello I'm login";
}

public function loggedin(){
    echo "you're logged in";
}

public function loggedinempty(){
    echo "its empty";
}
}

これは、GET 経由で変数を渡すために使用する HTML フォームです。

<html>
<head></head>
<body>
<form action="index.php" method="POST"><input type ="text" name="page" id="page" /><input type="submit" /></form>
<form action="index.php" method="GET">Page:<input type="text" name="page" id="page" />Function:<input type="text" name="func" id="func" /><input type= "submit" />
</body>
</html>

index に page を入力し、myfunc に function を入力すると、次の応答が返されます。

GEThello I'm login Notice: Undefined property: login::$funct in /home/cr47/public_html/final_project/index.php on line 27

そのため、「ページ」を正しく渡し、オブジェクトをインスタンス化していますが、myfunc 関数を正しく呼び出していません。何か案は?

4

1 に答える 1

2

$obj->funct;と置き換えます$obj->$funct();

しかし、注意してください。ユーザーに任意のクラスをインスタンス化させてはなりません。少なくともホワイトリストを使用するか、安全なクラスでのみ使用されるカスタム クラスのサブクラスにする必要があります (つまり、ユーザーが実行できないことを行う public メソッドはありません)。

于 2012-04-09T20:39:46.267 に答える