2012-11-08 99 views
0

我收到提示:致命错误:方法名称必须是一个字符串

Fatal error: Method name must be a string in C:\xampp\htdocs\index.php on line 15"

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

BTW:脚本不完成了。

+2

这是什么版本的PHP? –

+0

它的PHP 5.4.7(XAMPP) – user1810078

回答

2

其实,这句法:

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

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

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

...真的是太能(另一proof)抛出一模一样的错误,你所展示的,你不要在您的代码检查url数组长度的任何地方。

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; 
    } 
} 
+0

现在它说有一个空的属性,它不能访问它:/ – user1810078

+0

你确保你使用'$ obj-> url'而不是'$ obj - > $ url' –

+0

然后它说功能名称必须是字符串:D – user1810078

相关问题