Вы поместили определение функции внутри цикла. Например:
while ($someCondition) {
function newDate() {
// Function code
}
// Loop code
}
Это пытается переопределить функцию на каждой итерации цикла, что приведет к ошибке ваш см.
Либо завернуть определение функции в if
:
while ($someCondition) {
if (!function_exists('newDate')) {
function newDate() {
// Function code
}
}
// Loop code
}
Или (лучше) объявить функцию перед циклом:
function newDate() {
// Function code
}
while ($someCondition) {
// Loop code
}
EDIT Следуя от вас комментарий ниже, здесь как этот код можно было бы переписать для использования объекта DateTime
:
function format_date ($dateStr, $formatStr = 'd F Y') {
$date = new DateTime($dateStr);
return $date->format($formatStr);
}
$crap_date = get_post_meta($post->ID, 'start_date', true);
echo format_date($crap_date);
Эта функция принимает строку в любом формате даты, которая может быть проанализирована объектом DateTime
, поскольку это первый аргумент (я думаю, использует тот же внутренний механизм, что и strtotime()
). Необязательный второй аргумент - это строка формата, идентичная первому аргументу для функции date()
- если это опущено, будет использоваться значение по умолчанию d F Y
.
Что касается ваших вопросов ООП:
Is this approach better?
- Это очень спорный вопрос. Я вижу, что здесь комментируется, что объект DateTime
лучше, чем подход strtotime()
/date()
, и наоборот, но на самом деле это то, что вы должны использовать подход, который вы лучше всего понимаете, тот, который имеет наибольший смысл для данной ситуации , и тот, который делает код наиболее читаемым для вас и других разработчиков, с которыми вы можете работать. Я никогда не видел убедительных аргументов в пользу того, что один из них окончательно лучше другого. Для описанной выше процедуры я не думаю, что это имеет большое значение.
How could I rewrite my function in that format?
- См. Выше.
Is DateTime the object and format the method to change a property?
- DateTime
- наименование класс. В примере кода выше, переменная $date
является объектом , который представляет собой экземпляр из DateTime
класса. И да, format
- это имя метода .
Would this help me understand OO better if I will try and write all the code in this approach, where possible?
- ООП требует иного способа мышления, чем писать процедурный код, и это не тривиальная вещь, чтобы забрать. Есть много и много ресурсов, чтобы помочь вам справиться с ООП, поэтому я не буду вдаваться в это здесь, Google будет местом для начала. Единственное, что я скажу, это то, что, если вы хотите понять ООП, PHP не является местом для начала. PHP не язык OO, это язык сценариев, который обеспечивает поддержку OO. Я бы указал вам в направлении Java, чтобы узнать, как думать в OO, хотя другие могут и не согласятся.
спасибо. Быстрый вопрос вне темы, поскольку я искал похожие темы, кто-то предложил что-то вроде '$ date = new DateTime ('2011-02-25T10: 55: 25 + 0000'); print $ date-> format ('d/m/Y H: i: s'); ', этот подход лучше, как я могу переписать свою функцию в этом формате? Является ли DateTime объектом и форматирует метод для изменения свойства? Помогло бы мне лучше понять ОО, если я попытаюсь написать код в этом подходе, где это возможно? . – Chris
См. Править выше. – DaveRandom