2012-11-08 101 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

相關問題