从PHP中扩展的类创建类的新实例

从PHP中扩展的类创建类的新实例,php,class,extends,Php,Class,Extends,我正在用PHP编写一个大脚本,它需要在将来用户创建的扩展中对其进行安全保护。 我想创建一些东西,比如权限类检查对一些核心变量的扩展访问等 以下是startup类: class SystemStartup { private function startClass ( ) { require ( dirname( __FILE__ ) . '/sys.run.php' ); //starting SystemRun with something

我正在用PHP编写一个大脚本,它需要在将来用户创建的扩展中对其进行安全保护。 我想创建一些东西,比如权限类检查对一些核心变量的扩展访问等

以下是startup类:

class SystemStartup
{   
    private function startClass ( ) {
        require ( dirname( __FILE__ ) . '/sys.run.php' );   
         //starting SystemRun with something like core security token
        new SystemRun ( hash ( 'sha256' , $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR'] . microtime ( TRUE ) ) );
    }
    function __construct ( ) {  
        //here i have some security stuff like checking class not already running
        $this -> startClass ( );
    }
    function __destruct ( ) {
        //wywolane na samym koncu
    }

};
系统运行类:

class SystemRun
{   
    private     $SystemToken;

    //static because i want to be callable from other classes extending SystemRun
    protected static    $SystemUrlControl;

    private function startClass ( ) {

        //before more code

        //loading file with child class
        require ( dirname( __FILE__ ) . '/urlcontrol.php' );
        //starting it with security token
        echo $this -> SystemToken; //just for check
        self :: $SystemUrlControl = new SystemUrlControl ( $this -> SystemToken );  

        //more more more code (its main class)
    }
    protected function validateToken ( $SystemToken ) {
        echo $this -> SystemToken; //just for check
        //this should check tokens are the same
        if ( $this -> SystemToken == $SystemToken ) return TRUE;
        return FALSE;
    }
    function __construct ( $SystemToken ) { 
        //saving token for next classes
        $this -> SystemToken = $SystemToken;
        $this -> startClass ( );
    }
};
现在是带有扩展SystemRun的SystemUrlControl

class SystemUrlControl extends SystemRun
{   
    private         $SystemToken;

    //functions

    //more functions

    //more more more

    function __construct ( $SystemToken ) { 
        if ( !parent :: validateToken ( $SystemToken ) ) echo 'somebody else called me!';
        $this -> SystemToken = $SystemToken;
    }
};
问题在于,从
SystemUrlControl
调用validateToken返回
FALSE
-SystemRun时,会将其自身的SystemToken视为NULL

输出(来自echo)为:


在validateToken方法中,您有这样一个选项

$this -> $SystemToken
应该是

$this -> SystemToken

这个错误可能是由于文件中奇怪的格式(在
$this->
self::
和成员变量/函数之间使用空格造成的。是的,在这里编写代码是错误的:)我有$this->SystemToken。谢谢:)
self::$SystemToken
不是静态成员,因此必须与
$this->SystemToken
一起使用。它的一个“ctrl+z”在调试时会更改;)
$this -> SystemToken