Является ли подпись метода в PHP ДОЛЖНЫ или ДОЛЖНЫ?

Я имею в виду, если он вызван с $request который не является экземпляром sfWebRequest , будет ли он фатальным или просто предупреждение?

 class jobActions extends sfActions { public function executeIndex(sfWebRequest $request) { $this->jobeet_job_list = Doctrine::getTable('JobeetJob') ->createQuery('a') ->execute(); } // ... } 

    Это будет захватывающая фатальная ошибка.

    Вот пример:

     class MyObj {} function act(MyObj $o) { echo "ok\n"; } function handle_errors($errno, $str, $file, $line, $context) { echo "Caught error " . $errno . "\n"; } set_error_handler('handle_errors'); act(new stdClass()); /* Prints * * Caught error 4096 * ok */ 

    Если не было вызова set_error_handler код завершится с ошибкой:

     Catchable fatal error: Argument 1 passed to act() must be an instance of MyObj, instance of stdClass given, called in /home/test/t.php on line 16 and defined in /home/test/t.php on line 4 

    См. Главу « TypeHinting» в Руководстве по PHP

    Если $request не является экземпляром sfWebRequest или его подклассом или реализует интерфейс этого имени, этот метод вызовет уловкую фатальную ошибку . Выполнение скрипта прекратится, если ошибка не будет обработана.

    пример

     class A {} class B extends A {} class C {} function foo(A $obj) {} foo(new A); foo(new B); foo(new C); // will raise an error and terminate script 

    С интерфейсами

     interface A {} class B implements A {} class C {} function foo(A $obj) {} foo(new B); foo(new C); // will raise an error and terminate script