0

我收到错误:

致命错误:方法名称必须是第 15 行 C:\xampp\htdocs\index.php 中的字符串

第 15 行:

$obj = new $url[0]();

代码:

<?php
error_reporting(E_ALL ^ E_NOTICE);

$url = $_GET['url'];
$url = explode('/', $url);

if (!file_exists('controllers/' . $url[0] . '.php')) {
    $url[0] = 'error';   // error kontroleris 
}    
require 'controllers/' . $url[0] . '.php';

$obj = new $url[0]();
$obj->$url[1]();

顺便说一句:脚本还没有完成。

4

2 回答 2

2

实际上,这个语法:

$urls = array('DOMDocument');
$dom = new $urls[0]('');
var_dump( $dom );

... 即使在 PHP 5.2 中也有效(证明)。但是这条线...

$obj->$url[1]();

... 非常有能力(另一个证明)抛出与您展示的完全相同的错误,因为您不会url在代码中的任何地方检查数组长度。

于 2012-11-08T17:48:30.980 回答
0
$_GET['url'] = 'foo/bar'; // temp set $_GET
$url = $_GET['url'];
$url = explode('/', $url);

if (file_exists('controllers/' . $url[0] . '.php')){
    require 'controllers/' . $url[0] . '.php';
}else{
    $url[0] = 'error'; 
}

$obj = new URL;
if(method_exists($obj,$url[0])){ // test that method exists
    echo $obj->$url[0](); // or whatever your handling may be
}

class URL{
    public function error(){
        $return = 'this is for the error handling';
        return $return;
    }
}
于 2012-11-08T17:50:39.093 回答