в php.net написано следующее: Классы должны быть определены до создания экземпляра (а в некоторых случаях это требование). может ли кто-нибудь привести пример, когда это потребуется? потому что типичное его использование не требует, как в этом примере, работает нормально:
<?php $class = "a" ; $ob = new $class() ; class a { var $city = "new york" ; } echo $ob->city ; ?>
Это не сработает:
new Foo; if (true) { class Foo { } }
Условно объявленные классы должны быть первыми. В принципе, все, что находится на «верхнем уровне» файла, обрабатывается непосредственно парсером при разборе файла, что является шагом до того, как среда выполнения выполняет код (включая new Foo
). Однако, если объявление класса вложено внутри оператора, например if
, это должно быть оценено средой выполнения. Даже если это утверждение гарантировано будет истинным, анализатор не сможет оценить if (true)
, поэтому фактическое объявление класса отложено до выполнения. И во время выполнения, если вы попытаетесь запустить new Foo
перед class Foo { }
, он потерпит неудачу.