2010-12-08 9 views
0

저는 db.connect 정보처럼 상수를 유지하고 싶은 settings.php 파일을 가지고 있습니다.PHP는 전역 변수를 캡슐화합니다

내가 원하는 것은,하지만 내 인생에서, 나는 그것을 할 수있는 방법을 생각할 수 없다 ... 나는 내 settings.php에서 모든 상수가 세계적으로 이용 가능하기를 원하지 않는다. MVC 설정을 사용하고 있습니다. 예를 들어 내 컨트롤러에서 사용할 수있는 내 db 연결 정보가 없습니다. 내 DB 연결 상수는 그래서 그냥 내 모델 클래스로 캡슐화되도록

class Settings { 

    const HOST = 'localhost'; 

    .... 

    const DEBUG = true; 
} 

다음 내 응용 프로그램에로드하십시오 설정은 다음과 같이 파일 I 설정을 어떻게 내 질문은

.

내가 할 수있는 최선의 방법에 대해 설명하지는 않지만 기본적으로 다음과 같이 설정하고 싶습니다. A : 모든 설정에 대해 중앙 위치를 지정하고 B : 내 모든 환경 설정에 대한 액세스를 제어 할 수 있도록 설정하십시오. 응용 프로그램을 사용하여 전 세계적으로 사용할 수있는 것은 아닙니다.

내가 겪었던 문제는 부모 클래스에 settings.php 파일을 포함 시키면 모든 클래스가 settings.php에 액세스 할 수 있다는 것입니다.

+0

그런 상수에 대한 요점은 무엇입니까? 일반 변수를 사용하고 PDO 연결을 생성 한 다음 해당 변수를 처리하지 않도록 설정합니다 (또는 GC가 그 변수를 처리하도록합니다). – Crozin

+0

그래서 뭔가가 구성되면 값을 변경할 수 없습니다. 그래서, 그건 중요하지 않다고 생각하니? – imns

답변

1

함수로 감싸서 호출하십시오.

function init() { 
    $model = new Model; 
    $model->setConfigurationValue('name', 'value); 
    // etc ... 
} 
init(); 

이 방법은 전역 적입니다.

개인적으로 나는 구성을 YAML 파일에 저장하기 위해 symfony components YAML 라이브러리를 사용합니다.이 구성은 모든 곳에서 액세스 할 수 있지만 상태가 변경되는 것을 방지하는 단일 구성 개체로 자동로드됩니다. 코드를 망치지 않고 설정을 변경하기 쉽고, DEV 환경이 추가 설정 등을 추가 할 수 있도록 여러 개의 YAML 파일을 사용합니다.

+0

YAML이 외부 파일에 그러한 설정을 유지하는 것을 좋아하지는 않지만 IMHO는 갈 길입니다. – mhitza

+0

예. Symfony YAML 라이브러리에 대해 좋아하는 점은 PHP를 YAML에도 임베드 할 수 있다는 것입니다. 이상하지만 유용합니다. 어떤 접근 방식을 취하고 있습니까? INI 파일? 다른 것? –

+0

외부 파일은 settings.php 파일로 수행하려고 시도한 것입니다. 나는 YAML을 찾지 못했다. – imns

0

"local_settings.php"라는 파일에 클래스를 정의합니다. 파일을 "포함"하고 클래스를 PHP 프로그램 상단에 instansiate하십시오.

이 모든 사람들은 세계화에 관해 whinges가 실제로 세계의 가치있는 일종입니다! 다른 DB에 연결하는 다른 버전의 모델에서 작업하고 싶은 다른 클래스는 없을 것입니다.

관련 문제