問題の説明
通常、PHP 関数は次の方法で呼び出されます。
myFunction($parameter);
$parameter が設定されていない場合、PHP はエラーをスローします。それに対する解決策は、次のようにすることです。
if (isset ($parameter))
{
myFunction($parameter);
}
ただし、その関数を呼び出すたびに if() チェックを使用する必要があり、それが設定されているかどうかわからないのは本当に面倒です。私が最初に考えたのは、関数を次のように宣言することでした。
function myFunction($local)
{
if(isset($local))
{
//Code goes here.
}
}
しかし、PHP は設定されていない変数をパラメーターとして関数に渡すことをサポートしていないようであるため、関数の呼び出しは機能しませんでした。これを回避するために、変数変数を使用しました。
function myFunction($local)
{
if(isset(${$local})
{
//Code goes here.
}
}
myFunction('parameter');
可変変数がどのように機能するかを確認するには、PHP マニュアルを参照してください。
配列インデックスをチェックする必要があるまで、これはうまく機能していました。これを解決するために、確実に設定される配列で機能する別の関数を作成しました。
myFunctionArray($array,$key)
{
if(isset($array[$key]))
{
//Code goes here.
}
}
$variable = array();
myFunctionArray($parameter,'key');
この場合、$variable が設定されており、'key' は無害な文字列であるため、$variable[$key] が設定されていなくてもエラーは発生せず、関数内で isset チェックを正常に実行できます。ただし、これは明らかに多次元配列をサポートしていません。多次元配列をサポートするには、配列に期待される次元数を見越して、関数にさらにパラメーターを追加する必要があります。次の 2 つの関数のいずれかが機能します。
myFunctionMultiArray($array,$key1,$key2,$key3)
{
if(isset($array[$key1][$key2][$key3]))
{
//Code goes here.
}
}
myFunctionMultiArray2($array,$keys)
{
if(isset($array[$keys[0]][$keys[1]][$keys[2]]))
{
//Code goes here.
}
}
$variable = array();
myFunctionMultiArray($parameter,'key1','key2','key3');
myFunctionMultiArray2($parameter,array('key1','key2','key3');
もう 1 つの問題は、配列の深さごとに 1 つの関数を用意することです。関数に任意の深さの配列を供給できるようにするにはどうすればよいでしょうか?