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 に答える