致命错误:方法名称必须是字符串

时间:2012-11-08 17:45:59

标签: php oop fatal-error

我收到错误:

  

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

第15行:

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

CODE:

<?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]();

顺便说一句:脚本尚未完成。

2 个答案:

答案 0 :(得分:2)

实际上,这种语法:

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

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

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

...非常可能(另一个proof)抛出与您显示的完全相同的错误,因为您不会在代码中的任何位置检查url数组长度。< / p>

答案 1 :(得分: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;
    }
}