2016-08-25 5 views
-3

자기 운동과 훈련을 위해 나는 내 자신의 CMS를 처음부터 구축하고있다. 이 연습의 일부는 사용자 정의 html, css 템플릿을 사용하는 것입니다.require_once 함수 안에서

데이터베이스 처리기와 같은 외부 변수를 보호하기 위해 require_once 함수로 PHP 템플릿 파일을 열면 더 낫습니까?

아니면 전적으로 이렇게해야합니까?

그것은 require_once() 함수 내에서 변수를 정의하는 외부 파일에 완전히 쓸모가있을 것
+0

'require_once'가 함수와 어떤 관련이 있는지 이해할 수 없습니까? –

+0

require_once 함수를 사용하면 "see"이 함수에서 정의 된 변수 만이 작동합니다. –

+0

그건 require_once에만 국한된 것이 아닙니다. 그것은 Variables 스코프와 관련이 있으며'require_once'에 바인딩되지 않습니다. http://php.net/variables.scope –

답변

0

:

library.php :

<?php 

if (!isset($counter)) { 
    $counter = 0; 
} 

$counter++; // increments every time this file is included 
echo "Counter is $counter\n"; 

maincode.php :

<?php 

function foo() { 
     require_once('library.php'); 
     echo "foo() has counter = $counter\n"; 
} 

function bar() { 
     require_once('library.php'); 
     echo "bar() has counter = $counter\n"; 
} 

foo(); 
bar(); 

결과 :

$ php maincode.php 
Counter is 1 
foo() has counter = 1 
PHP Notice: Undefined variable: counter in maincode.php on line 10 
bar() has counter = 

Include d/require d 파일은 실행되는 컨텍스트의 범위를 상속합니다. include을 함수로 사용하면 함수의 컨텍스트를 가져 오며 변수가 함수 내에서 "로컬"변수가되어 파기됩니다 함수 호출이 반환 될 때

_once() 변형을 수행하는 경우 위의 경고로 이어지는 스크립트의 전체 수명 동안 문자 그대로 ONCE 파일 만 포함됩니다. require_once() 전화 (bar())는 파일이 이전에 foo() 호출 내에서 이미 포함 되었기 때문에 아무 것도하지 않았습니다. 따라서 포함되지 않았으므로 $counterbar() 내에 정의되지 않으며 현재는 아무 효과가 없습니다.

물론 include() 일반 및 require() 변형을 사용할 수 있습니다. 그러나 같은 문제가 발생합니다. 함수가 종료되면 포함 된 파일에 정의 된 모든 변수가 파괴됩니다. 즉, 데이터베이스 연결과 같은 것도 파괴되고 정리되므로 함수 호출간에 트랜잭션을 열어 둘 수 없습니다.

+0

을 참조하십시오. 이제이 사실을 알게되면 훨씬 더 똑똑해집니다. 함수 내에서 포함 된 파일을 포함하려는 내 목표는 훌륭합니다. 반대로, 당신이 언급 한 것처럼이 방법을 사용하십시오. 대답 해줘서 고마워 –

관련 문제