2011-03-23 2 views
0

Interspire 장바구니에서 PHP의 $ GLOBALS 변수에 대한 클래스가 많이 초기화되었습니다. 이 작업을 수행 할 때 성능이나 보안 문제가 있습니까?

아래는 위조 파일이지만 Interspire 장바구니와 비슷합니다.

<?php 
// account.php 

$GLOBALS['USER_ACCOUNT'] = new USER_ACCOUNT(); 
$GLOBALS['USER_ACCOUNT']->createPage(); //creating the page 

?> 

나는 페이지를 만드는 과정 내에서 $ GLOBALS [ 'USER_ACCOUNT']에 액세스해야합니다 포함받을 다른 파일 (위 참조) 것으로 나타났습니다. 따라서이 클래스 인스턴스는 나중에 다른 사용자가 필요합니다.

+0

가능한 복제본 : http://stackoverflow.com/questions/5166087/php-global-in-functions – igorw

+0

정확하게 위의 내용과 중복되는 것은 아니지만 확실히 관련이 있습니다. –

+2

내가 위의 코드에 대해 말할 수있는 것부터, 레지스트리의 일종으로 사용하고 있습니까? 아마도 그렇게하는 것이 안전 할 수도 있지만 확실히 그것을하는 가장 좋은 방법은 아닙니다. –

답변

2

이렇게하면 어떤 성능이나 보안 문제가 있습니까?

아니요.하지만 좋지 않습니다. 전역 범위 에 데이터를 저장하면이 잘못된 디자인의 징후가 될 수 있습니다. 과도한 전역 변수는 "코드 냄새"이지만이 특수한 용도로 사용하지는 않습니다.

의견에서 언급 한 것처럼 그들은 implementing the Registry pattern 대신이 전역 유형을 사용하는 것 같습니다. 은 글로벌 범위을 오염시키지 않고이 유형의 동작을 정확하게 허용하도록 설계되었습니다.

다른 많은 언어에는 실제로 변수에 대한 전역 범위가 없으므로 이 레지스트리 대신 사용할 수 있습니다. PHP는 잘못된 일을하기 쉽도록 만듭니다.

전역 변수가 아닌 레지스트리를 사용하면 코드 자동화 테스트를 더 쉽게 수행 할 수 있습니다.

관련 문제