2013-10-12 3 views
0

내가 이렇게 두 개의 클래스를 정의 말 : 기본적으로

abstract class ServerVars { 
    public static function get($k) { 
    if (empty($arr[$k])) throw new Exception('Not found'); 
    return $arr[$k]; // Also include error checking 
    } 
    public static function set($k, $v) { 
    $arr[$k] = $v; 
    } 
    ... // Other useful methods 
} 

public class Session extends ServerVars { 
    static $arr = $_SESSION; // !!! 
    public static function destroy() { 
    ... 
    } 
} 

, 난 그냥 $ _SESSION 같은 특정 서버 변수를 포장하는 것을 시도하고있다 , $ POST 등을 사용하여 코드를 모듈화합니다. 그러나 !!!으로 표시된 줄은 unexpected '$_SESSION' (T_VARIABLE)이라는 오류가 발생합니다. 이 오류가 발생하는 이유는 무엇입니까? 그리고 내가 성취하려는 일을하는 더 좋은 방법이 있습니까?

+1

이를 참조하십시오 : http://stackoverflow.com/questions/1694378/unexpected-t-variable-error –

답변

1

클래스 변수의 초기화 프로그램은 일정해야합니다. $_SESSION은 반드시 일정한 것은 아니지만 변수입니다.

이 작업에는 상속을 사용하지 마십시오. 전적으로 부적절합니다.

class DuplicatesBuiltInFunctionality { 
    public function __construct($arr) { 
     $this->arr = $arr; 
    } 

    public function get($k) { 
     if(!isset($this->arr[$k])) throw new Exception('Not found'); 
     return $this->arr[$k]; 
    } 

    public function set($k, $v) { 
     $this->arr[$k] = $v; 
    } 
} 
+0

왜 부적절 당신이 클래스를 가지고 주장하는 경우, 하나 개의 클래스해야 하는가? 제 경우에는 유용한 추상화처럼 보입니다. 자신의 방식대로, 나는 전체 프로그램에 대해 하나의 인스턴스 만 필요하기 때문에 인스턴스를 만들어야한다. (그리고 나는 싱글 톤 패턴을 사용하는 것을 피하려고한다.) 내가 궁금한 건 내 특정 코드를 작동시키는 방법이다. –

+0

@Intredasting : 아니요, 전체 프로그램에 대해 하나의 인스턴스가 필요하지 않습니다. 당신은'$ _SESSION'을 위해 하나,'$ _POST'를 위해 하나 (그리고 나는 당신이'$ _GET'과'$ _COOKIE'를 위해 같은 일을 할 계획이라고 가정하고 있습니다)가 필요합니다. – Ryan

+0

그러나 $ post = new DuplicatesBuiltInFunctionality ($ _ POST)를 말하면, 한 함수에서 사용하고, 다른 스크립트에서 정의 된 다른 함수에서 사용하고, 그 $ post를 사용할 수 없게됩니다 변하기 쉬운; 다른 인스턴스를 인스턴스화해야합니다. –

관련 문제