2017-01-13 9 views
-1

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

В моем контроллере я просто хочу: 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; 
    } 

} 
?> 
+0

ли вы на самом деле знаете ** ** почему вам нужны статические методы? –

+0

На данный момент единственной функцией, которую я хочу, является статической, является получение, но другие будут добавлены в ближайшие несколько дней. – Darkh

+0

Это будет очень плохой дизайн кода, смешивающий статический и нестационарный, и на самом деле вам никогда не нужно/не следует использовать статические методы, поскольку они не проверяются. И мой вопрос был ** почему ** вам нужны статические методы. Вы должны спросить себя! –

ответ

0

Вы должны понять, что именно 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

-1

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