В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
см. @svec и @jeremy выше. Все индексы массива имеют тип 'интервал' сначала, затем вводят 'строку' и будут брошены, к которому как PHP считает целесообразным.
мудрая Производительность, $index должен быть быстрее, чем "$index" и "{$index}" (которые являются тем же).
, Как только Вы запускаете строку двойной кавычки, PHP будет входить в режим интерполяции и рассматривать его как строку сначала, но поиск переменных маркеров ($, {}, и т.д.) для замены от локального объема. Поэтому в большинстве обсуждений, истинные 'статические' строки должны всегда быть одинарными кавычками, если Вам не нужны ярлыки Escape как "\n" или "\t", потому что PHP не должен будет пытаться интерполировать строку во времени выполнения, и полная строка может быть скомпилирована статически.
В этом случае, doublequoting сначала скопирует $index в ту строку, затем возвратить строку, куда непосредственно использующий $index просто возвратит строку.
Я синхронизировал 3 способа использовать индекс как это:
for ($ii = 0; $ii < 1000000; $ii++) {
// TEST 1
$array[$idx] = $ii;
// TEST 2
$array["$idx"] = $ii;
// TEST 3
$array["{$idx}"] = $ii;
}
первый набор тестов использовал $idx=0
, второй набор использовал $idx="0"
, и третий набор использовал $idx="blah"
. Синхронизация была сделана с помощью microtime()
diffs. Я использую WinXP, PHP 5.2, Apache 2.2 и Vim.:-)
И вот результаты:
$idx = 0
$array[$idx] // time: 0.45435905456543 seconds
$array["$idx"] // time: 1.0537171363831 seconds
$array["{$idx}"] // time: 1.0621709823608 seconds
ratio "$idx" / $idx // 2.3191287282497
ratio "{$idx}" / $idx // 2.3377348193858
$idx = "0"
$array[$idx] // time: 0.5107250213623 seconds
$array["$idx"] // time: 0.77445602416992 seconds
$array["{$idx}"] // time: 0.77329802513123 seconds
ratio "$idx" / $idx // = 1.5163855142717
ratio "{$idx}" / $idx // = 1.5141181512285
$array[$idx] // time: 0.48077392578125 seconds
$array["$idx"] // time: 0.73676419258118 seconds
$array["{$idx}"] // time: 0.71499705314636 seconds
ratio "$idx" / $idx // = 1.5324545551923
ratio "{$idx}" / $idx // = 1.4871793473086
Так $array[$idx]
победитель рук вниз соревнования по производительности, по крайней мере, на моей машине. (Результаты были очень повторяемы, BTW, я выполнил его 3 или 4 раза и получил те же результаты.)
я полагаю с точки зрения производительности, что $array [" $index"] быстрее, чем $array [$index] Видят, что Лучшие практики для оптимизации производительности кода PHP
не верят всему, что Вы читаете так вслепую... Я думаю, что Вы неправильно истолковали это. В статье говорится, что $array ['индекс'] быстрее, чем $array [индекс], где индекс строка , не переменная. Поэтому, если Вы не обертываете его в кавычки, PHP ищет постоянный var и не может найти, что тот так предполагает, что Вы означали делать его строкой.
, Когда различные методы индексирования решат к различным индексам?
Согласно http://php.net/types.array , индекс массива может только быть целым числом или строкой. При попытке использовать плавание в качестве индекса, это усечет его к целому числу. Таким образом, если $index
будет плавание со значением 3.14, то $array[$index]
оценит к $array[3]
, и $array["$index"]
оценит к $array['3.14']
. Вот некоторый код, который подтверждает это:
$array = array(3.14 => 'float', '3.14' => 'string');
print_r($array);
$index = 3.14;
echo $array[$index]."\n";
echo $array["$index"]."\n";
вывод:
Array([3] => float [3.14] => string)
float
string
, О, Вы правы, я предполагаю, что PHP должен преобразовать строки индекса массива в числа, если они содержат только цифры. Я попробовал этот код:
$array = array('1' => 100, '2' => 200, 1 => 300, 2 => 400);
print_r($array);
И вывод был:
Array([1] => 300 [2] => 400)
я сделал еще некоторые тесты и нашел, что, если индекс массива (или ключ) составлен только из цифр, это всегда преобразовывается в целое число, иначе это - строка.
ejunker:
можно ли объяснить, почему это быстрее? Разве это не делает интерпретатору дополнительный шаг для парсинга "$index" в строку для использования в качестве индекса вместо того, чтобы просто использовать $index в качестве индекса?
Если $index является строкой нет никакого различия, потому что $index, "$index" и "{$index}" все оценивают к той же строке. Если $index будет числом, например, 10, первая строка оценит к $array [10], и другие две строки оценят к $array ["10"], который является различным элементом, чем $array [10].
Я полагаю с точки зрения производительности, что $array [" $index"] быстрее, чем $array [$index] Видят Лучшие практики для оптимизации производительности кода PHP
Другое изменение, которое я использую иногда, когда у меня есть массив в строке:
$str = "this is my string {$array["$index"]}";
Редактирование: То, что я означал говорить, является $row [’id’], быстрее, чем $row [идентификатор]