Heim  >  Artikel  >  Backend-Entwicklung  >  PHP 有什么奇技淫巧?

PHP 有什么奇技淫巧?

WBOY
WBOYOriginal
2016-06-06 16:42:081207Durchsuche

回复内容:

自从PHP玩闭包后,大家一口气跳五楼,不费劲。


1、基础:一句话实现定义一个函数并立即调用
大家在JavaScript里经常这么搞,因为变量污染是个不可容忍的事儿。但是PHP里如何实现这样的功能?一个可行方法是:
<code class="language-text">call_user_func(function(){
        echo "hello,world";
});
</code>
@陈乏 还有一个解决办法的哈。
<code class="language-php"><span class="cp"><?php </span>

<span class="k">class</span> <span class="nc">A</span>
<span class="p">{</span>
    <span class="k">protected</span> <span class="k">function</span> <span class="nf">pro</span><span class="p">()</span>
    <span class="p">{</span>
        <span class="k">return</span> <span class="s2">"pro"</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="k">public</span> <span class="k">function</span> <span class="nf">pub</span><span class="p">()</span>
    <span class="p">{</span>
        <span class="k">return</span> <span class="s2">"pub"</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="nv">$a</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">A</span><span class="p">();</span>
<span class="nv">$ext</span> <span class="o">=</span> <span class="k">function</span> <span class="p">()</span> <span class="p">{</span>
    <span class="nb">var_dump</span><span class="p">(</span><span class="nv">$this</span><span class="p">);</span>
    <span class="c1">// var_dump($this->pro()); //Error: Call to protected method A::pro() </span>
    <span class="nb">var_dump</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">pub</span><span class="p">());</span>
<span class="p">};</span>
<span class="nv">$ext</span> <span class="o">=</span> <span class="nv">$ext</span><span class="o">-></span><span class="na">bindTo</span><span class="p">(</span><span class="nv">$a</span><span class="p">);</span>

<span class="nb">var_dump</span><span class="p">(</span><span class="nv">$ext</span><span class="p">());</span>
</span></code>
<code class="language-php"><span class="cp"><?php </span>
<span class="nv">$b</span><span class="o">=</span><span class="mi">3</span><span class="p">;</span>
<span class="k">switch</span><span class="p">(</span><span class="mi">1</span><span class="p">){</span>
    <span class="k">case</span> <span class="nv">$b</span><span class="o">==</span><span class="mi">3</span><span class="o">:</span>
        <span class="k">echo</span> <span class="s2">"fuck"</span><span class="p">;</span>
        <span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="cp">?></span><span class="x"></span>
</span></code>
<code class="language-php"><span class="cp"><?php </span>
<span class="k">function</span> <span class="nf">callback</span><span class="p">(</span><span class="nv">$callback</span><span class="p">)</span> <span class="p">{</span>  
    <span class="nv">$callback</span><span class="p">();</span>  
<span class="p">}</span> 
<span class="nv">$obj</span> <span class="o">=</span> <span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="s2">"php aaa"</span><span class="p">;</span>  
<span class="nv">$callback</span> <span class="o">=</span> <span class="k">function</span> <span class="p">()</span> <span class="k">use</span> <span class="p">(</span><span class="nv">$obj</span><span class="p">)</span> <span class="p">{</span>  
    <span class="k">print</span> <span class="s2">"This is a closure use object, msg is: </span><span class="si">{</span><span class="nv">$obj</span><span class="o">-></span><span class="na">scalar</span><span class="si">}</span><span class="s2">. <br>"</span><span class="p">;</span>  
<span class="p">};</span>  
<span class="nv">$obj</span><span class="o">-></span><span class="na">scalar</span> <span class="o">=</span> <span class="s2">"php bbb"</span><span class="p">;</span>  
<span class="c1">//$obj = (object) "php bbb";  </span>
<span class="nx">callback</span><span class="p">(</span><span class="nv">$callback</span><span class="p">);</span>
</span></code>
C语言有趋向于运算符 -->,这个 PHP 也有,就不说了。

补充一个:在 PHP 源代码中可以直接输入网址,不需要注释(黑魔法):
<code class="language-php"><span class="cp"><?php </span>
    <span class="nx">http</span><span class="o">://</span><span class="nx">www</span><span class="o">.</span><span class="nx">zhihu</span><span class="o">.</span><span class="nx">com</span>
<span class="cp">?></span><span class="x"></span>
</span></code>
奇技淫巧这个咋说呢, 玩玩还可以, 可千万别在实际项目中用, 贡献俩个吧:
交换俩个值:
list($b, $a) = array($a, $b);
$a = array($b, $b = $a)[0]; 当然是神奇的BOM头啦,不知道搞的多少PHP初学者睡不好觉 Quora 的列表
What are some cool PHP tricks? XML字符串转数组
<code class="language-php"><span class="x">$xmlObj = simplexml_load_string($xmlStr);</span>
<span class="x">$xmlArr = json_decode(json_encode($xmlObj) , true);</span>
</code>
1. stdClass();
<code class="language-php"><span class="x">$obj = new stdClass;</span>
<span class="x">$obj->a = 1;</span>
<span class="x">$obj->b = 2;</span>
</code>
Stellungnahme:
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