2012-03-08 2 views
1

Я в состоянии преобразовать дату (2011-01-05 до 05 января 2011) с помощью:Как использовать дату PHP() для преобразования YYYY-MM-YY «01 января 2011» в функции

<?php 
$whatever = get_post_meta($post->ID, start_date, true); 
$nice_date = date("d F Y", strtotime($whatever)); 
echo $nice_date; 
?> 

Однако, я хотел бы реализовать, что в функции, так что я могу использовать его в разных местах:

<?php 

function newDate($whatever) { 
$nice_date = date("d F Y", strtotime($whatever)); 
return $nice_date; } 

$crap_date = get_post_meta($post->ID, start_date, true); 
echo newDate($crap_date); 

?> 

функция внутри цикла While (WordPress). Первая дата получения отформатирован, а на второй я получаю следующее сообщение об ошибке:

Фатальная ошибка: Невозможно переопределить newDate() (ранее объявленный в ..

Как бы я сделать это работа и почему это происходит? Спасибо.

ответ

2

Вы поместили определение функции внутри цикла. Например:

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, хотя другие могут и не согласятся.

+0

спасибо. Быстрый вопрос вне темы, поскольку я искал похожие темы, кто-то предложил что-то вроде '$ date = new DateTime ('2011-02-25T10: 55: 25 + 0000'); print $ date-> format ('d/m/Y H: i: s'); ', этот подход лучше, как я могу переписать свою функцию в этом формате? Является ли DateTime объектом и форматирует метод для изменения свойства? Помогло бы мне лучше понять ОО, если я попытаюсь написать код в этом подходе, где это возможно? . – Chris

+0

См. Править выше. – DaveRandom

2

вы должны объявить функцию перед циклом. вы объявляете функцию с именем newDate первой, а затем использовать его в любом месте в любое время, но вы не можете объявить функцию с са меня снова назовут (и это правда, что происходит, когда вы пишете function newDate(..){....} внутри цикла.

function newDate($whatever) { 
$nice_date = date("d F Y", strtotime($whatever)); 
return $nice_date; } 

$crap_date = get_post_meta($post->ID, start_date, true); 
echo newDate($crap_date); 

//Here goes the loop 
while($i < 100) 
{ 
    //do something with the newDate function 
} 
2

ли функция объявлена ​​ внутри время цикла? Если это так, он будет объявлен один раз для каждой итерации цикла, и поскольку функция может быть объявлена ​​только один раз, это приведет к описанию ошибки.

Если это так, вы можете просто объявить функцию вне цикла (возможно, в другом файле с другими вспомогательными функциями) и вызвать ее изнутри цикла без проблем.

 Смежные вопросы

  • Нет связанных вопросов^_^