>  기사  >  백엔드 개발  >  PHP 有什么奇技淫巧?

PHP 有什么奇技淫巧?

WBOY
WBOY원래의
2016-06-06 16:42:081208검색

回复内容:

自从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>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.