如何在静态方法中使用'this'?我一直收到错误:PHP Catchable fatal error: Object of class could not be converted to string
以下是我尝试使用的方法:
public static function getFirst(){
$this->_id = 1;
$this->_name = $this->_db->query("SELECT name FORM users WHERE id = 1");
$this->_occupation = $this->_db->query("SELECT occupation FORM users WHERE id = 1");
$this->_email = $this->_db->query("SELECT email FORM users WHERE id = 1");
}
当我在主页面上调用此方法时,我需要让此方法在类中分配所有这些变量:
$currentUser = User::getFirst();
因此它从数据库中提取信息并将其放入类中的那些变量中。
我是PHP新手,尤其是PDO,所以请帮帮我吧! 提前致谢
答案 0 :(得分:1)
你必须用:
来定位它self::$variable
或
self::function();
修改强>
您的查询中有错误...将FORM更改为FROM:)
答案 1 :(得分:0)
您可以使用
self::$_id, self::$_name
$ _ id,$ _name应该是类的静态变量。 阅读http://www.php.net/manual/en/language.variables.scope.php
答案 2 :(得分:0)
您可以在PHP.net
上阅读静态方法可以在没有创建对象的实例的情况下调用, 伪变量$ this在声明的方法中不可用 作为静态。
答案 3 :(得分:0)
$这在静态方法中不可用。为了简化推理,将静态方法视为美化的全局函数。出于同样的原因,你不能在全局函数中使用$ this,$ this引用class instance
并且该函数不包含任何事物的实例,而不将其作为参数传递,与静态方法相同。 / p>
你可以毫无理由地将静态方法转移到更简单的“功能”,并且混乱将会消失。
PHP确实公开了类似的解析关键字:self。 self可以在静态方法中使用(听取类方法,而不是实例方法)来引用其他class methods
或class attributes
。基本上:如果它是静态的,它只能引用其他静态方法/属性。如果是实例,则可以通过$this
或self
引用静态和本地属性。
我真正的建议是避免使用静态方法。你不需要它们,而是使用函数。它们通常更容易测试和导航。否则明智地使用它们:工厂是明智和可接受的选择,这似乎是你想要实现的(DB需要作为参数注入,因为它也不是类属性而是实例属性):
public static function getFirst($db){
$inst = new NameOfThisClass();
$inst->_id = 1;
$inst->_name = $db->query("...");
return $inst;
}