Почему ссылка на неопределенный индекс не даст предупреждения? [Дубликат]

Я бы поднял ответ Артема, но я новый плакат. Я расширил его решение, хотя не то, что ОП запросил следующим образом

    t=(new Date()).toString().split(" ");
    timestring = (t[2]+t[1]+' <b>'+t[4]+'</b> '+t[6][1]+t[7][0]+t[8][0]);

Чтобы получить

04Oct 16:31:28 PDT

работает для меня ...

Но если вы начинаете только с количества времени, я использую две функции; один для форматирования и ввода, а один для расчета:

function sec2hms(timect){

  if(timect=== undefined||timect==0||timect === null){return ''};
  //timect is seconds, NOT milliseconds
  var se=timect % 60; //the remainder after div by 60
  timect = Math.floor(timect/60);
  var mi=timect % 60; //the remainder after div by 60
  timect = Math.floor(timect/60);
  var hr = timect % 24; //the remainder after div by 24
  var dy = Math.floor(timect/24);
  return padify (se, mi, hr, dy);
}

function padify (se, mi, hr, dy){
  hr = hr<10?"0"+hr:hr;
  mi = mi<10?"0"+mi:mi;
  se = se<10?"0"+se:se;
  dy = dy>0?dy+"d ":"";
  return dy+hr+":"+mi+":"+se;
}
-1
задан naseeba c 25 March 2016 в 08:04
поделиться

2 ответа

Объяснение так же просто, как это

Если вы назначаете, передаете или возвращаете неопределенную переменную по ссылке, она будет создана.

(выделение мое)

Это то, что вы делаете; Присвоение неопределенного индекса по ссылке, чтобы оно было создано.

Пример # 1 Использование ссылок с неопределенными переменными

<?php
function foo(&$var) { }

foo($a); // $a is "created" and assigned to null

$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?> 

Пример из руководства PHP

Тогда у вас есть еще один вопрос:

Между тем в то же время $ b [11] показывает значение NULL и isset () = FALSE, хотя его референт (по-видимому) существует (!) [/ ​​g9]

Это также ясно объясняется в руководстве

isset - Определить, переменная установлена ​​и не является NULL

isset () вернет FALSE, если тестирует переменную, которая была установлена ​​в NULL

Поскольку она NULL, isset() возвращает FALSE.

0
ответ дан Hanky Panky 24 August 2018 в 00:46
поделиться

Слот должен существовать для вас, чтобы иметь возможность перечислить ему другую переменную (что на самом деле происходит здесь, «ссылки» PHP не являются действительно реальными вещами, по ссылке "операция является регулярной операцией с копированием, замененной на псевдонимом), но она не должна содержать ненулевое значение и не до тех пор, пока вы ее не присвоите ей (через любое из ее имен).

0
ответ дан hobbs 24 August 2018 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: