関数定義自体をループ内に配置しました。例えば:
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()
)。オプションの2番目の引数は、date()
関数の最初の引数と同じフォーマット文字列です。これを省略すると、デフォルトd F Y
が使用されます。
OOPの質問について:
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?
--OOPには、手続き型コードを作成するのとは異なる考え方が必要であり、それを理解するのは簡単なことではありません。OOPを理解するのに役立つリソースはたくさんあるので、ここでは説明しません。Googleが出発点になります。私が言うことの1つは、OOPを理解したいのであれば、PHPは出発点ではないということです。PHPはオブジェクト指向言語ではなく、オブジェクト指向サポートを提供するスクリプト言語です。OOでの考え方を学ぶために、Javaの方向性を示しますが、他の人は反対する可能性があります。