2017-01-13 12 views
-1

테이블 클래스에서 간단한 함수뿐만 아니라 정적 함수도 사용하고 싶습니다. 어떻게하면됩니까? 직접 기능 check_table($table)를 호출 Table::get('posts')을 : 가 여기 내 전류 (작동하지 않습니다) 코드 내 컨트롤러에서함수 및 정적 메서드 사용

이다, 난 그냥하고 싶은.

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

현재 내가 원하는 정적 인 기능은 get이지만 다른 기능은 며칠 안에 추가 될 것입니다. – Darkh

+0

이것은 정적 및 비 정적을 혼합하는 정말 나쁜 코드 디자인입니다. 실제로 테스트 할 수 없으므로 정적 메서드를 사용하지 않아야합니다. 그리고 전에 내 질문은 ** 왜 ** 정적 메서드가 필요합니다. 너 자신에게 물어야한다! –

답변

0

를 넣어 시도 할 수 있습니다. 메소드를 정적으로 선언 할 때 "실제로이 클래스를 인스턴스화하지 않고도이 메소드를 직접 호출 할 수 있습니다."라고 말합니다. 따라서 정적 메서드를 사용하는 동안 객체 컨텍스트가 아니기 때문에 $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

당신은 당신은 정확히 static 수단을 이해해야한다 "자체 :: MethodeName"대신 "this-> MethodeName"