5543


PHP初心者です。  
FuelPHPのソースコードリーディングをしていたところ、Requestクラスのforgeメソッドに↓のような記述がありました。

[code]

    is_bool($options) and $options = array('route' => $options);
    is_string($options) and $options = array('driver' => $options);
    
[/code]

この記述はどういう意味になるのでしょうか？  
よろしくお願いします。

↓リクエストクラスの全文はこちらです。

[code]

    public static function forge($uri = null, $options = true, $method = null)
    {
        is_bool($options) and $options = array('route' => $options);
        is_string($options) and $options = array('driver' => $options);
    
        if ( ! empty($options['driver']))
        {
            $class = \Inflector::words_to_upper('Request_'.$options['driver']);
            return $class::forge($uri, $options, $method);
        }
    
        $request = new static($uri, isset($options['route']) ? $options['route'] : true, $method);
        if (static::$active)
        {
            $request->parent = static::$active;
            static::$active->children[] = $request;
        }
    
        // fire any request created events
        \Event::instance()->has_events('request_created') and \Event::instance()->trigger('request_created', '', 'none');
    
        return $request;
    }
    
[/code]


CC BY-SA 3.0
2015-01-29T01:23:43.223
5542
2015-01-29T02:08:15.347
2015-01-29T01:43:00.897
4978
7918
question
php
PHPの、 'A and B;' の文法について


短絡評価ってヤツですね。  
言語によっては短絡評価を行わないものもあるので注意ですが...

『A and B』という論理演算があった場合、AがfalseだとBを評価する前に『A and
B』の結果がfalseと確定します。なので、Bの処理や評価を行う必要が無いのでしません。これを短絡評価と言います。  
逆にAがtrueだとBの結果を得ないと『A and B』の結果が確定しませんよね？なので、Aがtrueの時のみBの処理を行います。

同じように『A or B』とあった場合、AがtrueだとBを評価する前に『A or
B』の結果がtrueと確定します。逆にAがfalseだとBの結果を得ないと『A or
B』の結果が確定しません。なので、Aがfalseの時のみBの処理を行います。

上記のような、仕様を利用してif文を短く書くことができます。JavaScriptやSh Scriptでもよく使われる書き方です。

<http://php.net/manual/ja/language.operators.logical.php>

分かりやすく書きかえるとこんな感じですかね。

[code]

    if(is_bool($options))
    {
      $options = array('route' => $options);
    }
    
    if(is_string($options))
    {
      $options = array('driver' => $options);
    }
    
[/code]


CC BY-SA 3.0
2015-01-29T01:32:38.260
5543
2015-01-29T02:08:15.347
2015-01-29T02:08:15.347
2383
2383
5542
answer