Вы поместили само определение функции в цикл. Например:
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
}
РЕДАКТИРОВАТЬ Исходя из вашего комментария ниже, вот как этот код может быть переписан для использования объекта 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, хотя другие могут и не согласятся.