如何在静态方法中使用'this' - PHP PDO

时间:2014-01-15 16:34:55

标签: php mysql pdo static

如何在静态方法中使用'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,所以请帮帮我吧! 提前致谢

4 个答案:

答案 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 methodsclass attributes。基本上:如果它是静态的,它只能引用其他静态方法/属性。如果是实例,则可以通过$thisself引用静态和本地属性。

我真正的建议是避免使用静态方法。你不需要它们,而是使用函数。它们通常更容易测试和导航。否则明智地使用它们:工厂是明智和可接受的选择,这似乎是你想要实现的(DB需要作为参数注入,因为它也不是类属性而是实例属性):

public static function getFirst($db){
    $inst = new NameOfThisClass();
    $inst->_id = 1;
    $inst->_name = $db->query("...");
    return $inst;
}