Используйте функцию и статический метод

В классе таблицы я хочу использовать простые функции, а также статические функции, как я могу это сделать? Вот мой текущий код (который не работает)

В моем контроллере я просто хочу сделать: Table::get('posts') который напрямую вызывает функцию check_table($table),

<?php
namespace Fwk\ORM;
use Fwk\Application;
use Fwk\Database\Database;

class Table extends Application {

    public function __construct()
    {
        $this->db = new Database();
    }

    public static function get($table) {
        if($this->check_table($table)) {
            return "ok";
        }

    }
    public function check_table($table) {
        $r = $this->$db->query("SELECT 1 FROM $table");
        return $r;
    }

}
?>

2 ответа

Решение

Вы должны точно понимать, что static средства. Когда вы объявляете метод как статический, вы, по сути, говорите: "Этот метод может быть вызван напрямую без создания экземпляра его класса". Поэтому, пока вы находитесь в статическом методе, у вас не будет доступа к $this так как вы не в контексте объекта.

Вы могли бы сделать check_table() статический и использовать его как своего рода фабрику:

public static function get($table) {
    if(self::check_table($table)) {
        return "ok";
    }

}
public static function check_table($table) {
    $r = (new Database())->query("SELECT 1 FROM $table");
    return $r;
}

http://php.net/manual/en/language.oop5.static.php

Вы можете попробовать поставить "self::MethodeName" вместо "this->MethodeName"

Другие вопросы по тегам