0

オプションのパラメーターを使用して PHP 関数を呼び出す場合、オプションのパラメーターがデフォルトのままであることを指定するにはどうすればよいですか? 他の言語には、default使用できるキーワードがあります - substr($str, 0, default).

substr($str, 0, null)

nullパラメータとして指定したので$length、空の文字列が返されますが、実際には文字列全体が必要でした。

substrドキュメントから:

length が指定され、0FALSEまたはNULLの場合、空の文字列が返されます。

この場合null、通常のように指定することはできません。また、番号を指定することもできません。


質問

  • $lengthのパラメータのデフォルト値はsubstr?
  • パラメータをデフォルト、つまりデフォルトのキーワード/演算子として指定する方法はありますか?

実際の例:

不適切な形式の URL からホスト名を抽出したいと考えています。

$url = 'example.com';

if(!$host = parse_url($url, PHP_URL_HOST))
{
    //There is no URL protocol so parse_url won't work
    $host = substr($url, 0, strpos($url, '/') ?: null);
}

echo $host;

上記の例では、スラッシュ ( ) が含まれていない$hostため、空の文字列です。の最後にスラッシュを追加すると、正常に機能します ( )。$url/$url$url = 'example.com/'

if三項の代わりに句を使用することしかできないことに気づきましたが、代わりにデフォルトのパラメータを送信する方法があるかどうか疑問に思いましたnull

4

3 に答える 3

1

次のようなものを使用してみてください。

 $host = substr($url, 0, strpos($url, '/') ?: strlen($url));

マニュアルの strlen() 関数

あなたの質問に対する完全な答えはNOです。PHPには、デフォルト値に対する事前定義された定数はありません。事前定義された定数を含むマニュアルへのリンク。

ただし、substr() $length パラメータの strlen() のように、使用する関数に応じて値を定義できます。

また、call_user_func_array() を介してパラメーターに応じて関数を呼び出すこともできます

たとえば、substr() の場合:

<?php
    $url = 'example.com/123';
    $params = array($url, 0);
    $tmp = strpos($url, '/') ? strpos($url, '/'): null;
    if(!is_null($tmp))
        array_push($params ,$tmp);

    $result = call_user_func_array('substr', $params );

    var_dump($result);

実例はこちら

于 2013-10-24T12:48:58.550 に答える
-1

これがあなたが求めているものなら

function myfunc($para1,$optional_para = null){
     //do stuff
}

したがって、 myfunc($para) と myfunc($para,$optional) の両方が有効です

于 2013-10-24T12:22:54.897 に答える