2016-11-16 12 views
1

이전에 다른 개발 회사에 할당 된 PHP 프로젝트를 상속 받았으며 이전에 보지 못했던 매우 이상한 코드 구현을 종종보고 있으며 아마 오류라고 생각합니다. 즉, 그들은 어디 에나 있으며 서버 로그는 그에 대한 불만이나 경고를 보내지 않습니다. error_reporting이 (가) 어딘가에서 꺼질 수 있습니다. 예를 들어PHP의 새 클래스 선언에 대한 구문

,이 같은 클래스 선언을 많이보고 있어요 :

$registration = new EventRegistration(); 
: 나는 오직 new를 사용하여 클래스의 인스 턴싱을 볼 때했던대로, 나에게 이상한

$registration = new EventRegistration; 

누군가가 이것이 정확하지 않거나/우수하지 않은지 명확히 할 수 있습니까?

필자는 컴파일 할 때 문법 오류라고 가정하지만 기술적으로 잘못되었습니다. 사람들이 $array['key'] 대신 $array[key]과 같은 배열 구문을 사용할 때와 비슷한 점. 그 맞습니까?

감사합니다.

+2

아니요 오류나 경고 또는 기술적으로 잘못된 것은 아닙니다. 클래스 생성자에 전달해야하는 인수가있는 경우 중괄호가 필요합니다. –

+0

좋습니다. 덕분에 생성자 인수가 필요없는 이유를 알 수 있습니다. . – DrewT

답변

1

new 키워드를 사용하여 새 개체를 만들려는 경우 해당 개체에 __construct() 메서드에 정의 된대로 아무런 인수도 필요하지 않으면 ()을 빠뜨리면됩니다.

class foo{ 
    function __construct(){} 
} // valid 

class bar{ 
    function __construct($arg = null){} 
} // valid 

class foobar{ 
    function __construct($arg){} 
} // not valid 

이 시나리오에서는 args를 전달하지 않으면 foobar 만 경고를 트리거합니다. 그것의 우선권의 문제는 말할 것입니다.

그러나 $array[key]의 경우 key은 경고 일 가능성이 높습니다.

+0

그렇습니다.'$ array [key]'는 컴파일 할 때 오류보고 기능을 켜고 경고를 던지기는하지만 사실입니다. 좋은 구문은 아니지만 프로젝트의 다른 곳에서 본 적이 있습니다. 생성자 예제를 주셔서 감사합니다. – DrewT

+0

PHP는 (경고를 읽습니다) 가정 할 수 있기 때문에, 그 권리를 의미하지는 않습니다. – Xorifelse

+0

그래, 내가 패스의 클래스를 선언하고 싶었던 이유가 그것이 부정확하다는 것도 알고있다. 이 프로젝트에서 변경해야 할 것이 많습니다 xD – DrewT