문제

C ++ 사전 처리기 #define 완전히 다릅니다.

PHP입니다 define() 단순히 var를 만드는 것과 다른 것이 있습니까?

define("SETTING", 0);  
$something = SETTING;

vs

$setting = 0;  
$something = $setting;
도움이 되었습니까?

해결책

'Define'작동 자체는 XDEBUG 프로파일러에 의해 확인됩니다.

다음은 벤치 마크입니다 http://t3.dotgnu.info/blog/php/my-first-php-extension.html:

  • 순수한 '정의'
    380.785 페치/초
    14.2647은 MSEC/First Response를 의미합니다

  • 'Hidef'확장으로 정의 된 상수
    930.783 가져 오기/초
    6.30279는 MSECS/First Response를 의미합니다


깨진 링크 업데이트

위에서 언급 한 블로그 게시물은 인터넷을 떠났습니다. 여전히 볼 수 있습니다 여기서 웨이 백 머신을 통해. 여기 또 다른 것이 있습니다 비슷한 기사.

저자 참조 라이브러리를 찾을 수 있습니다 여기 (APC_DEFINE_CONSTANTS) 그리고 여기 (Hidef Extension).

다른 팁

일반적으로 상수의 아이디어는 끊임없는, (재미있는 소리, 맞습니까?;)) 내부 프로그램. 즉, 컴파일러 (통역사)가 전체 스크립트 전체에서 "foobar"를 foobar의 값으로 대체한다는 것을 의미합니다.

이론과 장점에 대해 너무 많은 것 - 당신이 컴파일한다면. 이제 PHP는 상당히 역동적이며 대부분의 경우 PHP 스크립트가 각 실행에 따라 컴파일되므로 다르지 않습니다. AFAI-CAN-TELL 바이트 코드 캐시를 사용하지 않는 한 상수와 변수 간의 속도에 주목할만한 차이가 표시되지 않아야합니다. APC, Zend Optimizer 또는 eccelerator. 그러면 의미가 있습니다.

상수의 다른 모든 장점/단점은 이미 여기에서 언급되었으며 PHP 매뉴얼.

php > $cat='';$f=microtime(1);$s='cowcow45';$i=9000;while ($i--){$cat.='plip'.$s.'cow';}echo microtime(1)-$f."\n";

0.00689506530762

php > $cat='';$f=microtime(1);define('s','cowcow45');$i=9000;while ($i--){$cat.='plip'.s.'cow';}echo microtime(1)-$f."\n";

0.00941896438599

이것은 비슷한 결과로 반복 할 수 있습니다. 상수가 변수보다 정의 및/또는 사용하기에 약간 느린 것처럼 보입니다.

다음은 다음과 같습니다 수동

  • 상수는 그들 앞에 1 달러 표시 ($)가 없습니다.
  • 상수는 간단한 할당이 아니라 정의 () 함수를 사용 하여만 정의 될 수 있습니다.
  • 상수는 가변 범위 규칙에 관계없이 어디서나 정의되고 액세스 될 수 있습니다.
  • 상수가 설정되면 상수를 재정의하거나 정의하지 않을 수 있습니다. 그리고
  • 상수는 스칼라 값 만 평가할 수 있습니다.

저에게있어 주요 이점은 글로벌 범위입니다. 나는 그들의 효율성에 대해 걱정하지 않는다 - 당신이 변경할 수 없어야하는 글로벌 스칼라 값이 필요할 때마다 사용하십시오.

효율적이지 않습니다. (그리고 나는 여기에 php.net의 한 의견에 대한 모든 가정을 기반으로하고 있습니다. 나는 여전히 벤치 마크를 직접 수행하지 않았습니다.)

상수를 회상하면 변수를 리콜하는 시간이 2 배가 걸립니다.

상수의 존재를 점검하면 오 탐지에 2ms와 12ms가 걸립니다!

다음은 PHP의 온라인 문서에서 Define Page의 의견에서 벤치 마크입니다.

defined ()를 사용하기 전에 다음 벤치 마크를 살펴보십시오.

true                                       0.65ms
$true                                      0.69ms (1)
$config['true']                            0.87ms
TRUE_CONST                                 1.28ms (2)
true                                       0.65ms
defined('TRUE_CONST')                      2.06ms (3)
defined('UNDEF_CONST')                    12.34ms (4)
isset($config['def_key'])                  0.91ms (5)
isset($config['undef_key'])                0.79ms
isset($empty_hash[$good_key])              0.78ms
isset($small_hash[$good_key])              0.86ms
isset($big_hash[$good_key])                0.89ms
isset($small_hash[$bad_key])               0.78ms
isset($big_hash[$bad_key])                 0.80ms

PHP 버전 5.2.6, Apache 2.0, Windows XP

각 진술은 1000 번 실행되었으며 1000 번의 통화로 12ms 오버 헤드가 최종 사용자가 머리카락을 찢어 버리지 않지만 if (true)와 비교할 때 흥미로운 결과를 내립니다.

1) ($ true)가 사실상 동일하다면 2) (true_const)가 거의 두 배나 느린 경우 - 컴파일 시간에 대체가 수행되지 않았다고 생각합니다 (이 제품을 두 번 확인해야했습니다!) 3) defined ()는 IS입니다. 상수가 존재하는 경우 3 배 더 느려집니다. 4) 정의 된 ()는 상수가 존재하지 않으면 19 배 느립니다! 5) ISSET ()는 당신이 던지는 것에 관계없이 놀랍도록 효율적입니다 (배열 중심 이벤트 시스템을 구현하는 사람에게는 좋은 소식 - 나!)

(정의 된 ( 'debug'))를 피할 수 있습니다.

tfconsulting dot com dot au 26-mar-2009 06:40에서 Tris+Php에서

http://us.php.net/manual/en/function.defined.php#89886

정의는 단순한 정적 감각이므로 런타임 중에 값을 변경할 수 없지만 변수는 프로세스를 따라 값을 자유롭게 조작 할 수 있기 때문에 변수는 동적 인 의미입니다.

주요 차이점 :

  • 정의는 일정하고 변수는 가변적입니다
  • 그것들은 다른 범위/가시성입니다

속도 테스트를 실행할 때 상수가 설정되고 버려지는 것은 변수를 설정하고 버리는 것보다 훨씬 빠르게 실행됩니다.

효율성에 대해서는 확실하지 않지만 VAR을 만드는 것 이상입니다.

  • 상수입니다.이 설정을 재정의하거나 재 할당 할 수 없습니다.
  • 정의를 찾지 못하면 $ something이 "설정"으로 설정되어 있습니다. 예를 들어 I18N에서 유용합니다. 번역이 누락 된 경우 (즉, 해당 정의가 현지화 파일입니다) 큰 단어가 표시됩니다. 대문자, 꽤 눈에 띄는 ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top