2011-11-03 3 views
0

최근에 클래스를 사용하기 시작했습니다. 나는 꽤 오랫동안 프로 시저 프로그래밍을 사용 해왔다. 그래서 다소 어려웠다.PHP 클래스와 전역 변수

내 질문.

나는이 같은 클래스가있는 경우 :

class Example { 

    public $name; 
    public $whatever; 
    public $yearAdded 

    public function __construct($name, $whatever=NULL, $dateAdded) 
    { 

    some trival code here; 

    } 


} 

가 어떻게 $yearAdded 내가 다른 스크립트에서 다른 곳으로 설정 전역 변수를 사용할 수 있습니까? 예를 들어

:

global $currentYear = date('Y'); 

나는이 방법

new example($name, $whatever, $currentTime); 

또는이에게 항상 $yearAdded에 대한 $currentYear를 사용하는 클래스 내에서 지정하는 방법을해야합니다.

답변

2

global 키워드는 생각대로 작동하지 않습니다. 전역 범위를 갖는 변수를 만들지 않습니다. 변수는 외부 범위에서 변수를 사용하고자 할 때 호출하는 함수에 지정됩니다. 예를 들어

:

$a="test"; 

function something() { 
    global $a; 
    echo $a; //Outputs: test 
} 

당신이이 클래스 내에서 액세스 할 수 있도록 변수 글로벌 확인하려면, 당신은 $GLOBALS 자동 전역을 사용해야합니다.

http://www.php.net/manual/en/reserved.variables.globals.php

이 일을하는 가장 좋은 OOP 방법으로 간주되지 않지만 해낼 것입니다.

+0

당신은 현재의 타임 스탬프와 같은 것을 위해이 슈퍼 전역을 사용하는 것이 가장 좋다고 생각하니, 또는 그런 종류의 정보를 클래스에 한정하는 것이 가장 좋습니다. 내가 제공 한 예가 약간 추상적이라는 것을 안다. – Hugo

+0

무엇이 최선의 OOP 방식이라고 생각합니까? – Hugo

+1

@Hugo, 가장 좋은 방법은 클래스를 생성하여 생성자에서 작동하는 데 필요한 모든 것을 전달하는 방식으로 일반화되도록하는 것입니다. 그런 다음 각 함수에 대해 매개 변수로 추가 매개 변수를 전달하십시오. 이 규칙을 어기는 유일한 시간은 데이터베이스 연결 또는 구성 옵션과 같은 것들입니다. 청교도들은 그것들도 통과되어야한다고 말했을 것이고, 그들은 옳다. – Brad

0

이미 내장형 time() 함수가 있으므로 생성자에서 자생 글로벌 변수가 필요한 이유는 무엇입니까?

글로벌을 어떻게 사용하고 있는지 신중하게 생각하면 일반적으로 동일한 정보에 액세스하는 더 좋은 방법이 있음을 알게됩니다. 시스템 환경 변수, 환경 설정 파일 등등.

+0

추론은 시스템에서 발생하는 거의 모든 것이 DB에 추가되는 시간을 얻는다는 것입니다. 예 : 작업이 db에 시스템에 게시됩니다. 2011-10-01 12:22:00 (지금)을 포함하는 dateAdded라는 필드가있는 테이블이 있습니다. 그러나 데이터베이스는 예를 들어 사용자와 다른 시간대에 있으므로 시간대를 고려해야합니다. 그래서 나는 현재 시간과 날짜를 가진 해당 사용자에 대한 전역 변수를 설정합니다. 그게 최선의 방법인지 확신 할 수 없으므로 제안에 대해 개방적입니다! – Hugo

+0

'time()'함수는 유닉스 시간 (UTC)을 산출한다. 'Date()'를 보면'o' 형식 플래그로'year'를 호출하면 시간대에 독립적 인 UTC 연도를 얻을 수 있습니다.[link] http://php.net/manual/en/function.date.php를 참조하십시오. – rsj

+0

@rsj, DB 서버 및 웹 서버의 시계가 동기화되어 있음을 보장 할 수 없습니다. 그들이 모두 NTP를 사용하더라도 오류가 발생할 수 있습니다. – Brad