Domanda

Sono in grado di convertire la data (2011-01-05-05 gennaio 2011) usando:

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

Tuttavia, vorrei implementarlo in una funzione così posso usarlo in posti diversi:

<?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);

?>
.

La funzione è all'interno di un ciclo tempo (WordPress). La prima data viene formattata correttamente , ma sul secondo ottengo il seguente messaggio di errore:

Fatale Errore: impossibile Redeclare NewDate () (precedentemente dichiarato in ..

Come dovrei fare questo lavoro e perché è successo? Grazie.

È stato utile?

Soluzione

Hai messo la definizione della funzione stessa all'interno di un ciclo. Ad esempio:

while ($someCondition) {

  function newDate () {

    // Function code

  }

  // Loop code

}
.

Questo tenta di redigrare la funzione su ogni iterazione del ciclo, che comporterà l'errore che si vedrà.

Avvolgere la definizione della funzione in un if:

while ($someCondition) {

  if (!function_exists('newDate')) {
    function newDate () { 

      // Function code

    }
  }

  // Loop code

}
.

o (meglio) dichiarare la funzione prima del ciclo:

function newDate () { 

  // Function code

}

while ($someCondition) {

  // Loop code

}
.

Modifica Seguendo da te Commento qui sotto, ecco come questo codice potrebbe essere riscritto per utilizzare l'oggetto 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);
.

Questa funzione accetta una stringa in qualsiasi formato data che può essere analizzato dall'oggetto DateTime come primo argomento (penso che utilizzi lo stesso meccanismo interno come strtotime()). Il secondo argomento facoltativo è una stringa di formato identica al primo argomento per la funzione date() - se viene omesso, verrà utilizzato il d F Y predefinito.

Per quanto riguarda le tue domande OOP:

Is this approach better? - questo è molto importante. Vedo che ha commentato qui che l'oggetto generacodictagcode è migliore dell'approccio DateTime / strtotime() e viceversa, ma in realtà ciò che si riduce è che dovresti usare l'approccio che comprendi meglio, quello che ha più senso per una determinata situazione , e quello che ti fa il codice più leggibile per te e altri sviluppatori con cui potresti lavorare. Non ho mai visto un argomento convincente per uno definitivamente migliore dell'altro. Per la routine sopra, non penso che faccia molta differenza.

date() - vedi sopra.

How could I rewrite my function in that format? - Is DateTime the object and format the method to change a property? è il nome di classe . Nel codice di esempio sopra, la variabile DateTime è un oggetto , che è un'istanza del $date . E sì, DateTime è il nome di un metodo .

format - OOP richiede un modo diverso di pensare rispetto a scrivere codice procedurale, e non è una cosa banale da ritirare. Ci sono molte, molte risorse là fuori per aiutarti a prendere le impugnature con OOP quindi non entrerò qui, Google sarebbe il posto dove iniziare. L'unica cosa che dirò è che se vuoi capire OOP, PHP non è il posto dove iniziare. PHP è non una lingua OO, è un linguaggio di scripting che fornisce supporto OO. Ti indicherei in direzione di Java per imparare a pensare a OO, anche se altri possono e non sono in disaccordo.

Altri suggerimenti

Dovresti dichiarare la funzione prima del ciclo. Dichiari una funzione denominata prima NewDate e quindi usalo ovunque in qualsiasi momento, Ma non puoi dichiarare di nuovo una funzione con lo stesso nome (e questo è esattamente ciò che accade quando scrivi function newDate(..){....} all'interno di un ciclo.

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
}
.

è la funzione dichiarata all'interno del ciclo mentre loop?In tal caso, verrà dichiarato una volta per ogni iterazione del loop, e poiché una funzione può essere dichiarata solo una volta, questo porterà all'errore che descrivi.

Se questo è il caso in cui puoi semplicemente dichiarare la funzione al di fuori del loop (forse in un file diverso con altre funzioni di helper) e chiamarlo dall'interno del ciclo senza problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top