2016-06-29 7 views
0

자주 권장되는 자습서 Build a PHP MVC Application을 따라 갔고 단축 된 if 문인 Build a PHP MVC Application 코드를 실행하여 ?:을 사용했습니다. 이런 종류의 짧은 코드에 대해서는 익숙하지 않기 때문에 필자는 그것을 작성하는 방법을 다시 만들려고했습니다.코드 줄을 if 문으로 바꾸기

$this->params = $url ? array_values($url) : [];

내가 해낸 :

if(isset($url)) 
    { 
     $this->params = array_values($url); 
    } 

이 똑같은 일을하고 있습니까? 또는 나는 무엇인가 놓치고 있냐? 그것은 효과가 있고 똑같은 것처럼 보이지만 확실히 알고 싶습니다.

<?php 
    class App 
    { 

    protected $controller = 'home'; 
    protected $method = 'index'; 
    protected $params = []; 

    public function __construct() 
    { 
     $url = $this->parseUrl(); 

     if(file_exists('../app/controllers/' . $url[0] . '.php')) 
     { 
     $this->controller = $url[0]; 
     unset($url[0]); 
     } 

     require_once '../app/controllers/' . $this->controller . '.php'; 

     $this->controller = new $this->controller; 

     if(isset($url[1])) 
     { 
     if(method_exists($this->controller, $url[1])) 
     { 
      $this->method = $url[1]; 
      unset($url[1]); 
     } 
     } 

     $this->params = $url ? array_values($url) : []; 

     call_user_func_array([$this->controller, $this->method], $this->params); 
    } 

    public function parseUrl() 
    { 
     if(isset($_GET['url'])) 
     { 
     return $url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL)); 
     } 
    } 
    } 
+2

'if ($ url) {$ this-> params = array_values ​​($ url); } else $ this-> params = []; ' – splash58

+0

첫 번째 코드는'$ url'의 내용을'true'로 검사한다는 것을 설명하는 것이 중요합니다. 귀하의 예제는 변수가 설정되어 있는지 확인합니다. 그리고 조건이 작동하지 않는 경우 ('else') 솔루션을 제공하지 않았습니다. 어쨌든, 특파원은 이미 @ splash58과 비슷할 것입니다. – FirstOne

+0

그 형식은 또한'$ variable = $ condition? $ value_if_true : $ value_if_false' – morcen

답변

3

if (isset($url))이 설정 변수의 존재를 확인합니다 : 답변 중 일부는 $ URL의 상태에 따라 달라집니다 때문에

, 여기에 전체 코드입니다.

if ($url)은 변수 자체에서 진실 값을 확인합니다.

당신은 그런데 if ($url)

를 사용해야합니다, 당신에게 익숙하지의 코드는 ternary statement라고! 다른 여러 언어 (예 : Ruby)에서 일반적으로 사용되며 작동 방식을 파악하는 것이 좋습니다.

진실 가치에 대한 의미가 무엇인지 모르면 boolean casting에 대해 더 읽어야합니다.

+0

이전에 선언되지 않은 경우 'if ($ url)'이 오류를 던지지 않습니까? 아니면 if ($ arr [ 'myUndefinedKey'])'와 같은 배열에 접근하려고 할 때만 가능합니다. 죄송합니다 offtopic 질문에, 그냥 시도해 볼 수 있지만, 글쎄, 난 지금 썼습니다 ... – lexith

+1

@ 렉서스 통지를 유발하지만, NULL로 가정합니다 – sjagr

+0

고마워요, 그냥 해봤 :)이 wasn ' PHP 4 나 sth와 같은 오래된 PHP 버전의 동작? PHPStorm은 정의되지 않은 것으로 표시되기 때문에 이것이 최선의 방법은 아닙니다. 즉,'(isset ($ url) && $ url)'이 실제로 더 좋지 않다는 것을 의미합니까? – lexith

1

가장 간결한 방법은 다음과 같습니다

$this->params = []; 
if($url) { 
    $this->params = array_values($url); 
} 

또는 그것은 원 문이라고

if($url) { 
    $this->params = array_values($url); 
} 
else { 
    $this->params = []; 
} 

. [value] = [condition] ? [if true] : [else]. 등가의

http://php.net/manual/en/language.operators.comparison.php

+0

'$ this-> params []'는 클래스 헤더 ('protected $ params = []')에 이미 정의되어 있습니다. (전체 코드를 게시하지 않아서 유감 스럽지만 충분히 관련 있다고 생각했습니다.) 그래서'if ($ url)'문을 사용합니다. 나는'isset()'을 사용할 필요가 없다고 생각한다. 감사! – Max

1

:

if(isset($url)) 
{ 
    $this->params = array_values($url); 
} else { 
    $this->params = []; 
} 
+1

누락 된 세미콜론 – morcen

+0

고맙습니다. –

+0

귀하의 회신은 isset()을 제외한 다른 의견과 거의 일치합니다. (반드시 나쁜 것은 아닙니다, 생각해 주셔서 감사합니다!) – Max

1

issetPhp으로는 variavbledefined이 아닌지 확인하는데 사용된다. 단지 returntrue이고 false는 variable에 기반하여 정의됩니다.더 많은 정보를 들어

에 대한 issetternaryopreators 당신이 대신 다음 multiple conditions이있을 때

Ternary operators이 usedful 있습니다 쓰기 더 편리 if-else 아무것도하지만, 약식없는 다른 손에 http://php.net/manual/en/function.isset.php

를 참조하시기 바랍니다 if-else을 복수 사용하면

$data= ($value== 1) ? "one" : (($value== 2) ? "two" : "other"); 
0과 같이 ternary을 사용할 수 있습니다.

당신은 이것에 여러 조건을 연결할 수 있습니다

+0

이것은 3 진수 연산자를 사용하는 미래의 발생에 매우 유용합니다. 나는 여전히 if/else 문을 쓸 필요가 있음을 느낀다. 왜냐하면 나는 읽는 것이 더 쉬울 것이고 필요한 경우 나중에 괄호 안에 코드를 추가 할 것이라고 생각하기 때문이다. – Max

관련 문제