如何在不使用PHP创建外部实例的情况下一起使用非静态和静态方法

时间:2018-02-28 12:58:23

标签: php

我有以下情况,想要使用特定方法作为静态,所以我可以将$ this用于其他方法。

<?php 
 class foobar {
public $foo;

public function __construct() {
    global $foo;

    $this->foo = $foo;
}

public static function foobarfunc() {
    return self::foo();
}
public function foo() {
    return $this->foo = 'hi';
}
}
echo foobar::foobarfunc();
?>

错误:

  

致命错误:在

中不在对象上下文中时使用$ this

这是我的情景

class DB{
    public function selectQuery(){
        $data = $this->finddata();
        return "SELECT $data FROM bhumi";
    }
    public function finddata(){
        $data = ('*');
        return $data;
    }
}
class TP extends DB{
    public static $create;

    public function __construct(){
       $this->parentObj = new DB();
    }
    public static function printQ(){
        $d = parent::selectQuery();
        return $d;
    }
}
echo TP::printQ();

怎么做?这段代码给了我错误。

3 个答案:

答案 0 :(得分:1)

试试这种方式

public static function foobarfunc() {
    $foobar = new self();
    return $foobar->foo();
}

答案 1 :(得分:1)

如果您不想创建实例,请忽略原因:

<?php 
 class foobar {
public static $foo;

public function __construct() {
    global $foo;

    $this->foo = $foo;
}

public static function foobarfunc() {
    return self::foo();
}
public static function foo() {
    return self::$foo = 'Hi!';;
}
}
echo foobar::foobarfunc();
?>

答案 2 :(得分:0)

public static function foobarfunc() {
    return self::foo();
}

您只想加载另一个名为“foo”的静态方法。此方法存在且不是静态的,因此错误有效。

您可以使用

进行修复
public static function foobarfunc() {
    $instance = new self();
    return $instance->foo();
}

尽管如此,这种用途的有用性仍未解决。