2013-12-16 1 views
-3

PHP 학습의 일환으로 의미를 형식화하려고합니다. 이 작업을 단순화하는 가장 좋은 방법은 가능한 한 많은 구문을보다 근본적인 표현을위한 "구문 설탕"으로 이해하는 것입니다. 그런 식으로 나를위한 구문을 정의하는 구문 양식이 적습니다.Desugaring PHP 구문

PHP에는 많은 양의 문법이 포함되어있는 것으로 보입니다. 몇 가지 예 : if { ... }

  • if/endif 및 기타 "대안 구문"desugar, expr1; while (expr2) { statements; expr3; }에 등

  • for (expr1; expr2; expr3) { statements; } desugars.

  • 다음 내용이 참이라고 생각합니다. $foo${'foo'}을 의미합니다. 즉, 변수를 이름으로 참조하는 것은 표현식을 문자열로 평가하여보다 일반적인 변수 조회의 인스턴스에 불과합니다. 이에

    <p>foo</p> 
    <?php echo 5; ?> 
    <p>bar</p> 
    

    desugars :

  • 나는이 생각
    echo "<p>foo</p>\n"; 
    echo 5; 
    echo "<p>bar</p>\n"; 
    

    또는 일반적으로

    ?>blah<?php 그냥 echo 'blah';을 의미한다.

확실히 많은 다른 사례가 있습니다. 나는 포괄적이고 정확한 것으로 확인 된 목록을 제시하고자합니다. (그리고 내 예 중 하나는 부정확 할 수있다, 그래서 저를 수정하시기 바랍니다!)

+0

필자는 보통 ' '이라고 쓰고 있습니다. ?>' – saada

+2

'for '가 통사론이라고 생각하십니까? :) –

+0

* blah * 예에서 완전히 잘못되었습니다. '?> blah Phil

답변

7

그 방법에 대한 의미를 정의하는 나를 위해 덜 구문 형태가있다.

나는 당신이 틀린 각도에서 접근하고 있다고 생각합니다. 예를 들어 설명해 보겠습니다.

$words = array('hello', 'wonderful', 'world'); 
foreach ($words as $word) { 
    echo $word; 
} 

니스가 너무 높습니다. 우리의 배열이 연관되지 않기 때문에 이제 for 간단한와 foreach을 교체하자

for ($i = 0; $i < count($words); ++$i) { 
    echo $words[$i]; 
} 

지금 드롭 for :

function doPrint($words, $i = 0) 
{ 
    if ($i < count($words)) { 
     echo $words[$i]; 
    } 
    doPrint($words, $i + 1); 
} 

doPrint($words); 

정말 우리를 수행 while 종류의 성가신

$i = 0; 
while ($i < count($words) { 
    echo $words[$i]; 
    ++$i; 
} 

그건 함수를 사용해야합니까?

echo $words[0]; 
echo $words[1]; 
echo $words[2]; 

이러한 변수는 무엇입니까?

echo "hellowonderfulworld"; 

결론

기초 아래 언어를 분해하지 마십시오; 언어 표현력은 올바른 상황에서 사용되는 이유가 있습니다. 가능한 한 많은 기초를 배우고 많은 "설탕"을 배웁니다.

언어를 유창하게 구사하려면 언어가 제공해야하는 것의 대부분을 시도해야합니다. 연습, 연습, 연습!

+0

'foreach'는 정말 그런 식으로하지 않습니까? 필자는'for' 루프보다 더 일반적인 키 - 값 맵을 반복하는 것으로 생각합니다.또한, 아마 당신은 나를 오해했습니다. '기초를 먼저 배우고 가능한 한 많은'설탕 '을 배웁니다.' 그것이 바로 제가 목표로하는 것입니다 : "기초"에 대한 의미를 파악한 다음, 더 사소한 통용적 인 설탕을 배웁니다. 그러나 "기본 사항"이 무엇인지 먼저 식별해야합니다. :-) – jameshfisher

+0

@jameshfisher 더 일반적으로'reset()'과'each()'로 분해 할 수 있습니다; 또한, 그냥 예입니다 :) –

+0

@ jameshfisher 귀하의 질문에 설탕을 요구하고있다; 제안은 비 설탕을보고 시작해야한다는 것입니다. –