Я имею в виду, если он вызван с $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