2009-06-29 5 views
-2

직접 액세스 및 일정 기능을 고속? (이하 메모리, CPU)인가액세스 속도

define("FOO","VAL"); 
print FOO; 
print constant(FOO); 

당신은 나에게 샘플 코드와 이유, 그래서를 제공 할 수 행복하다.

편집 : 미안 해요 오해 그것은 매우

인쇄 FOO 또는 인쇄 상수 (FOO)

고속은 무엇입니까?

+0

상수 (FOO)는도 유효하지 않습니다. constant() 함수는 문자열 인수 ("상수 유형 인수"가 없음은 물론)가 없으므로 상수 ("FOO") 여야합니다. – deceze

답변

2

2 개의 인수 constant()가 어디 있는지 모르겠지만 constant() 함수는 검색 할 상수 이름 인 하나의 인수 만 사용하는 게터입니다.

define()은 상수 (설정자)의 값을 정의합니다. 이 두 기능의 성능을 비교하는 것은 완전히 다른 작업을 수행함에 따라별로 의미가 없습니다.

0

이러한 간단한 작업의 속도에 관해 질문 할 때는 &이라는 빠른 벤치마킹을 수행하고 결과를 비교하는 것이 가장 좋습니다.

define("FOO", "VAL"); 
$iterations = 10000; 
$start_1 = microtime(true); 
for ($i = 0; $i < $iterations; $i++) { 
    print FOO; 
} 
$end_1 = microtime(true); 
$time_1 = $end_1 - $start_1; 

$start_2 = microtime(true); 
for ($i = 0; $i < $iterations; $i++) { 
    print constant('FOO'); 
} 
$end_2 = microtime(true); 
$time_2 = $end_2 - $start_2; 

printf('"print VAL;" %d iterations: %.5F s', $iterations, $time_1); 
print PHP_EOL; 
printf('"print constant(\'FOO\');" %d iterations: %.5F s', $iterations, $time_2); 

하지만 두 가지 사이에 큰 차이가 있음을 알지 못합니다.

0

나는 당신이 어떤 constant()가 사용되고 있는지 오해한다고 생각합니다. 상수에 액세스하기 만하면 직접 처리하십시오 : print FOO;

액세스하려는 상수를 모르면 constant()가 필요합니다. 나는. 다음과 같이 "가변 변수"를 사용할 수 있습니다 :

$name = 'var1'; 
$var1 = 'value something or other'; 
print $$name; // prints the value of $var1: 'value something or other' because: 

${$name} -> ${"var1"} -> $var1 -> 'value something or other' 

변수의 이름을 변수로 대체합니다.

당신은 상수와 함께이 작업을 수행 할 수 없습니다

$name = 'CONST1'; 
define('CONST1', 'value something or other'); 
print $name; // prints the value of $name: 'CONST1' 

당신은 상수() 사용해야합니다 :

print constant($name); // prints 'value something or other'