PHP: Почему дата превращается в массив?

#php

#php

Вопрос:

Почему эта строка преобразуется в массив и как мне это остановить, пожалуйста?

Фрагмент: (чтобы получить дату)

 public function setDate(){
        $this->date = date("Y-m-d");
        return $date;
    }


public function getDate(){
    return $this->date;
}


$date = getDate();
  

Фрагмент: (часть запроса)

         ->where_equal_to(
            array(
                'sales_date' => $date
            )
        )
  

Когда вы сбрасываете запрос, он делает это…

Вывод:


 array(1) { ["sales_date"]=> array(11) { ["seconds"]=> int(42) ["minutes"]=> int(10) ["hours"]=> int(14) ["mday"]=> int(3) ["wday"]=> int(1) ["mon"]=> int(10) ["year"]=> int(2011) ["yday"]=> int(275) ["weekday"]=> string(6) "Monday" ["month"]=> string(7) "October" [0]=> int(1317647442) } }
  

вместо чего-то подобного…


Вывод:

 array(1) { ["sales_date"]=> "2011-10-03 00:00:00" }
  

Комментарии:

1. В этом, безусловно, чего-то не хватает. Во-первых, 'sales_date' => '$date' это не будет работать так, как вы думаете, потому что замены переменных не выполняются в одинарных кавычках….

2. Похоже, вы используете какую-то библиотеку БД или ORM. Вероятно, вам следует упомянуть об этом, поскольку, вероятно, это то, что делает это (PHP не склонен принимать строки и случайным образом превращать их в массивы).

3. Это очень простой пользовательский класс запросов, вот и все…

4. Пожалуйста, опубликуйте код этого «базового пользовательского класса запросов». Опубликованных вами фрагментов недостаточно для диагностики проблемы. (Смотрите также — pscode.org/sscce.html )

5. @Alex Не обижайся на людей за то, что они просят дополнительной информации. Они пытаются помочь.

Ответ №1:

Вы вызываете функцию PHP getdate() , а не $obj->getDate() , поэтому она возвращает массив, основанный на возвращаемом значении из встроенной функции.

http://us2.php.net/getdate

Комментарии:

1. Большое вам спасибо, все объясняет.

Ответ №2:

Массив, который вы видите, является результатом getdate() функции PHP.

Где-то в вашем коде вы вызываете getdate() вместо своей пользовательской getDate() функции (я предполагаю, что последняя находится в классе, иначе она выдала бы ошибку компилятора при попытке переопределить существующую функцию). Вот в чем заключается ваша проблема. Вы не показали соответствующий фрагмент кода, но он, вероятно, находится внутри вашего класса. Возможно, вам потребуется вызвать его как $myvar = $this->getDate(); или $myvar = $someobject->getDate(); вместо just $myvar = getDate(); .

Как бы то ни было, в случае, если вы не можете изменить сам класс, [0] элементом возвращаемого массива является временная метка, которую достаточно легко преобразовать обратно в дату любого формата с помощью date() функции.

Комментарии:

1. Спасибо за ваш ответ, jprofitt добрался туда раньше вас, вот и все.

Ответ №3:

Вы не можете повторно объявить getDate() [docs], потому что он уже существует. Кроме того, вы забыли

  • объявите экземпляр для своего класса
  • вы вызываете getDate (функцию) вместо getDate (метод)

http://sandbox.phpcode.eu/g/9fb88/3