Попробуйте сделать do_something статическим членом ActionHandler
class ActionHandler {
public static $smarty = NULL;
public function __construct()
{
if($this->smarty == NULL)
{
$this->smarty = new Smarty();
$this->smarty->template_dir = TEMPLATE_DIR;
$this->smarty->compile_dir = COMPILE_DIR;
}
}
public static function do_something($page_id)
{
return $page_id + 1;
}
}
Поскольку вы пытаетесь получить доступ к нестатическому методу, я * думаю, что __construct выполняется до того, как метод станет доступен, но поскольку вы не создали экземпляр объекта, ключевое слово $this
не существует.
Вы должны создать определенные статические методы. если ты идешь MyObject::SomeMethod($param)
Вы также должны взглянуть на Автоматическую загрузку объектов и Автоматическую инициализацию объектов статическими методами.
также вам не нужно специально определять значение для public static $smarty = NULL;
, поскольку Null - это значение по умолчанию для любой новой переменной, просто выполните
public static $smarty;
немного углубившись в вашу проблему, вы должны добавить одноэлементный метод, например, так ...
class ActionHandler
{
public static $smarty;
public static $singleton;
public function __construct()
{
if($this->smarty == NULL)
{
$this->smarty = new Smarty();
$this->smarty->template_dir = TEMPLATE_DIR;
$this->smarty->compile_dir = COMPILE_DIR;
}
}
public static GetSingleton()
{
if(self::$singleton == null)
{
self::$singleton = new ActionHandler();
}
return self::$singleton;
}
public static function do_something($page_id)
{
$_this = self::GetSingleton();
return $page_id + 1;
}
}