Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное "новое" (T новое) в .../test6 2.PHP на линии 20
просто пытаюсь сохранить и исправить источники из PHPBench.com
и ударил эту ошибку (сайт не работает и автор не ответил на вопросы). Это источник:
<?php
// Initial Configuration
class SomeClass {
function f() {
}
}
$i = 0; //fix for Notice: Undefined variable i error
// Test Source
function Test6_2() {
//global $aHash; //we don't need that in this test
global $i; //fix for Notice: Undefined variable i error
/* The Test */
$t = microtime(true);
while($i < 1000) {
$obj =& new SomeClass();
++$i;
}
usleep(100); //sleep or you'll return 0 microseconds at every run!!!
return (microtime(true) - $t);
}
?>
является ли это допустимым синтаксисом или нет? Поправьте меня, если я ошибаюсь, но думаю, что он создает ссылку на SomeClass, поэтому мы можем вызвать new $obj()
... Заранее спасибо за помощь
1 ответов
объекты всегда хранятся по ссылке. Вам не нужно =&
и, как прокомментировала Шарлотта, это устаревший синтаксис.
исправьте меня, если я ошибаюсь, но думаю, что он создает ссылку на SomeClass, поэтому мы можем вызвать new $obj() .
нет, это неправильно. The new
оператор всегда создает экземпляр класса, а не ссылку на класс как тип.
вы можете создать экземпляр объекта переменной, просто создав строка переменная с именем класса и использованием этого.
$class = "MyClass";
$obj = new $class();
функции как get_class () или ReflectionClass:: getName () возвращает имя класса в виде строки. В PHP нет понятия "ссылка на класс", как в Java.
самое близкое, о чем вы думаете, это ReflectionClass:: newInstance () но это ненужный способ создания объекта динамически. Почти в каждом случай, лучше просто использовать new $class()
.