PHP-Kettenaufruf

WBOY
Freigeben: 2016-08-08 09:06:53
Original
1338 Leute haben es durchsucht

strlen (strim ($str))Dies ist eine Funktion, um die Länge einer Zeichenfolge zu ermitteln. Wie schreibe ich sie als Kettenoperation?

<code>$str -> trim() -> strlen()</code>
Nach dem Login kopieren
Nach dem Login kopieren

Tipps:

Implementieren Sie zuerst eine String-Klasse. Wenn das Objekt dieser Klasse aufgerufen und verarbeitet wird, wird die magische Methode __call ausgelöst und dann wird call_user_func ausgeführt

Antwortinhalt:

strlen (strim ($str))Dies ist eine Funktion, um die Länge einer Zeichenfolge zu ermitteln. Wie schreibe ich sie als Kettenoperation?

<code>$str -> trim() -> strlen()</code>
Nach dem Login kopieren
Nach dem Login kopieren

Tipps:

Implementieren Sie zuerst eine String-Klasse. Wenn das Objekt dieser Klasse aufgerufen und verarbeitet wird, wird die magische Methode __call ausgelöst und dann wird call_user_func ausgeführt

Der Quellcode lautet wie folgt

<code class="php"><?php
/**
 * 字符串处理
 *
 * @author Flc <2016-08-04 23:39:41>
 * @link http://flc.ren
 */
class Str
{
    /**
     * 字符串
     * @var [type]
     */
    protected $string;

    /**
     * 支持的函数
     * @var array
     */
    protected $methods = ['trim', 'strlen'];

    /**
     * 初始化
     * @param [type] $string [description]
     */
    public function __construct($string)
    {
        $this->string = $string;
    }

    /**
     * 单例模式
     * @param  string $string 字符串
     * @return Object:Str         
     */
    public static function getInstance($string)
    {
        static $_instances = [];

        if (isset($_instances[$string]))
            return $_instances[$string];

        return $_instances[$string] = new self($string);
    }

    /**
     * 输出
     * @return string 
     */
    public function response()
    {
        return $this->string;
    }

    /**
     * 模式方法
     * @param  string $method 方法
     * @return Object:Str         
     */
    public function __call($method, $args)
    {
        if (in_array($method, $this->methods)) {
            if (function_exists($method)) {
                $this->string = call_user_func($method, $this->string);
            }
        }

        return $this;
    }
}

// DEMO
echo Str::getInstance(' 123123 123')->trim()->strlen()->response();
?></code>
Nach dem Login kopieren

<code><?php
/**
 * Created by PhpStorm.
 * User: hongxu
 * Date: 16/8/4
 * Time: 13:21
 */

class str {

    private $str = '';

    /**
     * str constructor.
     */
    public function __construct($str) {

        $this->str = $str;
    }

    public function trim() {
        $this->str = trim($this->str);
        return $this;
    }

    public function strlen() {
        return strlen($this->str);
    }
}

$str = new str('要思考,不做伸手党');

var_dump($str->trim()->strlen());die;</code>
Nach dem Login kopieren

Ausgabe:

<code>php test.php
int(25)
</code>
Nach dem Login kopieren

<code class="php"><?php
class Str {
    private $value = '';

    public function __construct($str) {
        $this->value = $str;
    }

    public function __call($name, $args) {
        if (function_exists($name)) {
            array_unshift($args, $this->value);
            $value = call_user_func_array($name, $args);
            if (is_string($value)) {
                return new static($value);
            } else {
                return $value;
            }
        }
    }

    public function __toString() {
        return $this->value;
    }
}

$str = new Str('  题主是不是个伸手党?  ');

echo($str->trim() . PHP_EOL);
echo($str->trim()->strlen() . PHP_EOL);
$trim_str = $str->trim();
echo($trim_str->substr(0, $trim_str->strlen() - 1) . PHP_EOL);</code>
Nach dem Login kopieren
<code>题主是不是个伸手党?
28
题主是不是个伸手党</code>
Nach dem Login kopieren

Es ist nicht schwierig, eine solche Funktion zu implementieren. Sie müssen lediglich die Zeichenfolge kapseln. Wenn Kettenaufrufe erforderlich sind, geben Sie einfach $this zurück.
Bitte sehen Sie sich den folgenden Code an, um Ihre Funktion zu realisieren:

<code><?php
//演示链式调用

class MyString{
    private $string;
    
    function MyString($str){
        $this->string=$str;
    }
    
    function len(){
        return strlen($this->string);
    }
    
    function _trim(){
        $this->string=trim($this->string);
        return $this;
    }
}

$d=new MyString(' sdfsdf  ');
echo $d->_trim()->len();
?></code>
Nach dem Login kopieren

->Warum braucht man Leerzeichen ==, das sieht komisch aus

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage