2017-01-13 1 views
-1

In einer Tabellenklasse möchte ich einfache Funktionen aber auch statische Funktionen verwenden, wie kann ich tun? Hier ist meine aktuellen Code istVerwenden Sie Funktion und statische Methode

In meinem Controller (die nicht funktioniert), möchte ich nur: Table::get('posts'), die direkt die Funktion check_table($table) aufruft.

<?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

Wissen Sie eigentlich, warum ** ** Sie die statischen Methoden benötigen? –

+0

Im Moment ist die einzige Funktion, die ich möchte, dass statische ist, aber andere würden in den nächsten Tagen hinzugefügt werden. – Darkh

+0

Dies wäre ein wirklich schlechtes Code-Design, das statisch und nicht statisch vermischte. Sie brauchen auch keine statischen Methoden, da sie nicht testbar sind. Und meine Frage vorher war ** warum ** brauchst du statische Methoden. Du solltest dich selbst fragen! –

Antwort

0

Sie müssen genau verstehen, was static Mittel. Wenn Sie eine Methode als statisch deklarieren, sagen Sie im Wesentlichen "Diese Methode kann direkt aufgerufen werden, ohne dass die Klasse tatsächlich instanziiert wird". Während Sie sich in einer statischen Methode befinden, haben Sie keinen Zugriff auf $this, da Sie sich nicht im Objektkontext befinden.

könnten Sie check_table() machen statischen auch und es als eine Art Fabrik verwenden:

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

Sie können versuchen, "self :: MethodeName" zu setzen statt "this-> MethodeName"

Verwandte Themen