Php 访问类方法

Php 访问类方法,php,Php,我的班级: class mvc { public function home () { return 'index'; } } 对象: include "./sys/controller/".$Current_page_Controller_name.".php"; // making object of the controller class. $controller = new $Current_page_Cont

我的班级:

class mvc {
    public function home () {
        return 'index';
    }
}
对象:

include "./sys/controller/".$Current_page_Controller_name.".php";

        // making object of the controller class.
            $controller = new $Current_page_Controller_name;

        // Cheks if model is called, m stands for "model"
            if (isset($_GET['m'])) {

            }

            $method_name = $mvc->$Current_page_Controller_name.'()';

    // Cheks if default model exists, if not gives an error.
        if (method_exists($controller, $method_name)) {
            echo "+";
        } else {
            echo "-";
            //die("Lappas sledzis saplisis, gaidiet drizuma... (2)");
        }
我一直在纠正这个错误

Notice: Undefined property: mvc::$home in /home/unusuallv/domains/.../public_html/sys/config.php on line 51

问题在$method_name=$mvc->$Current_page_Controller_name附近。“()”;我知道,但我想不出多少

您正在调用该函数,这就是错误所在。你不想叫它,但要知道它的名字。为此,您不需要
$method\u name=$mvc->$Current\u page\u Controller\u name.'()'而是
$method\u name=当前页面\u控制器\u name$mvc->$method\u name()

当PHP处理脚本时,当您从
$mvc
访问变量时,它会考虑
$mvc->$Current\u page\u Controller\u name.'()'
,然后将字符串
'()'
附加到脚本中

考虑以下示例:

//somewhere file
class MVC{
public $someVar="QWERTY";
public function abc(){/*...*/}
public function parseResponse(){/*...*/}
};
///.....
$mvc=new MVC;
$abc="someVar";
$x=$mvc->$abc."()";
echo $x;//gives you "QWERTY()"

$b=method_exists($mvc,$abc);//false
$b=method_exists($mvc,'abc');//true
//call function
$abc="parseResponse";
$mvc->$abc();//calls MVC::parseResponse
应该是这样的:

$method_name = $mvc->$Current_page_Controller_name();

在以下表达式中:


$method_name = $mvc->$Current_page_Controller_name.'()';
->
运算符的优先级高于字符串串联运算符(
)。这意味着PHP首先计算表达式
$mvc->$Current\u page\u Controller\u name
,因此它尝试访问mvc类的home属性(该属性不存在)

改用这个:


$method_name = $mvc->$Current_page_Controller_name();

为什么将上部称为类,将下部称为对象?而不是$mvc->$Current\u page\u Controller\u name。“()”使用$mvc->$Current\u page\u Controller\u name()您理解错误,$Current\u page\u Controller\u name是mvc类中的函数名。我需要访问它://在您添加示例之前,答案是确定的,现在您通过提供一个带有错误的次优示例使其变得糟糕。您定义了一个变量$someFunc,但将其称为Func for Function,将其称为someVar,如果有的话。我检查了代码,没有给出错误,一切都如注释所示。@user1609394我添加了如何调用存储在变量中的函数的示例。

$method_name = $mvc->$Current_page_Controller_name();