#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() , поэтому она возвращает массив, основанный на возвращаемом значении из встроенной функции.
Комментарии:
1. Большое вам спасибо, все объясняет.
Ответ №2:
Массив, который вы видите, является результатом getdate()
функции PHP.
Где-то в вашем коде вы вызываете getdate()
вместо своей пользовательской getDate()
функции (я предполагаю, что последняя находится в классе, иначе она выдала бы ошибку компилятора при попытке переопределить существующую функцию). Вот в чем заключается ваша проблема. Вы не показали соответствующий фрагмент кода, но он, вероятно, находится внутри вашего класса. Возможно, вам потребуется вызвать его как $myvar = $this->getDate();
или $myvar = $someobject->getDate();
вместо just $myvar = getDate();
.
Как бы то ни было, в случае, если вы не можете изменить сам класс, [0]
элементом возвращаемого массива является временная метка, которую достаточно легко преобразовать обратно в дату любого формата с помощью date()
функции.
Комментарии:
1. Спасибо за ваш ответ, jprofitt добрался туда раньше вас, вот и все.
Ответ №3:
Вы не можете повторно объявить getDate()
[docs], потому что он уже существует. Кроме того, вы забыли
- объявите экземпляр для своего класса
- вы вызываете getDate (функцию) вместо getDate (метод)