我有以下内容:
class HP_Utils {
/**********************************************************************/
public static function getAction()
/**********************************************************************/
{
if( isset( $_GET[ 'action' ] ) ) {
return $_GET[ 'action' ];
}
else if ( isset( $_POST[ 'action' ] )) {
return $_POST[ 'action' ];
}
}
/**********************************************************************/
}
然后在其他课程中:
$this->utils = $this->load( 'helper', 'Utils' );
$action = $this->utils::getAction(); <============== ERROR
装载机:
abstract class MController {
/**********************************************************************/
protected function load( $type, $className ) {
switch( $type ) {
case 'model':
$name = 'MD_' . $className;
break;
case 'view':
$name = 'VW_' . $className;
break;
case 'helper';
$name = 'HP_' . $className;
break;
}
$path = $type . '/' . $name . '.php';
include( $path );
return new $name;
}
给我错误:
PHP Parse错误:语法错误,意外的'::' (T_PAAMAYIM_NEKUDOTAYIM)in 第11行/home/jorgee/www/menu/controller/CT_Menu.php
显然我很难访问静态方法,但我认为这是方法,有什么帮助吗?
答案 0 :(得分:1)
正确的方法是替换它:
$action = $this->utils::getAction(); <============== ERROR
用这个:
$action = HP_Utils::getAction();
我相信你也可以在PHP中调用静态方法,就像它是一个实例方法一样,如下所示:
$action = $this->utils->getAction();
但第一个版本通常更好,因为它非常清楚你实际上是在调用静态方法而不是实例方法。
答案 1 :(得分:1)
$this->load()
返回对象,而不是类。因此,当调用$this->utils::getAction()
时,您会收到错误。
我会直接使用类名HP_Utils::getAction()
,但如果您需要它是动态的,可以使用call_user_func
:
abstract class MController {
/**********************************************************************/
protected function load( $type, $className ) {
switch( $type ) {
case 'model':
$name = 'MD_' . $className;
break;
case 'view':
$name = 'VW_' . $className;
break;
case 'helper';
$name = 'HP_' . $className;
break;
}
$path = $type . '/' . $name . '.php';
include( $path );
return $name;
}
//The actual calling code :
$this->utils = $this->load( 'helper', 'Utils' );
$action = call_user_func($this->utils . '::getAction()');
请注意,调用某些方法这是一种非常难看的方法。你应该问自己这里是否有设计问题。