Maison php教程 php手册 沈逸老师PHP魔鬼特训笔记(4)

沈逸老师PHP魔鬼特训笔记(4)

Aug 30, 2016 am 09:21 AM

上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性。(还有个附件PHAR包,我直接无视了)

然后在GOD文件中写了一些参数,

  我们也可以这样,把方法名像拼凑字符串一样拼起来。

 <span style="color: #800080;">$get_param</span>=<span style="color: #800080;">$argv</span>[1<span style="color: #000000;">];
 godinit</span>::<span style="color: #800080;">$get_param</span>();
Copier après la connexion

  好,下面我们还是按照老师课程,进行需求实现:如果参数带“-”,那么说明就是属性。直接调用类的静态属性。如果不带“-”,那么说明是方法,我们直接调用类的静态方法。

  于是,我先把上节课写过的god文件改成下面这样:

<span style="color: #008000;">#</span><span style="color: #008000;">!/usr/local/bin/php</span>
<span style="color: #000000;">php

</span><span style="color: #0000ff;">require</span>('god_func7'<span style="color: #000000;">);
</span><span style="color: #0000ff;">require</span>("godinit.php"<span style="color: #000000;">);

    </span><span style="color: #800080;">$result</span>=''<span style="color: #000000;">;
    </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$argc</span>>=2<span style="color: #000000;">)
    {     
        </span><span style="color: #008000;">/*</span><span style="color: #008000;">'-v'==$argv[1]  && $result=godinit::$V;
        'make'==$argv[1]  && $result=godinit::make();
        'init'==$argv[1] && $result=godinit::init();</span><span style="color: #008000;">*/</span>
        <span style="color: #800080;">$p</span> = <span style="color: #800080;">$argv</span>[1];  <span style="color: #008000;">//</span><span style="color: #008000;">获取参数</span>
        <span style="color: #0000ff;">if</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,0,1)=='-')     <span style="color: #008000;">//</span><span style="color: #008000;">  代表获取并匹配变量,</span>
<span style="color: #000000;">        {
          </span><span style="color: #008000;">//</span><span style="color: #008000;">如果传过来的是-v,就会变成v</span>
          <span style="color: #800080;">$p</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,1<span style="color: #000000;">);
           </span><span style="color: #800080;">$result</span> = godinit::$<span style="color: #800080;">$p</span><span style="color: #000000;">;
        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
            </span><span style="color: #800080;">$result</span> = godinit::<span style="color: #800080;">$p</span><span style="color: #000000;">();
        }
    }
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$result</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">echo</span> <span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">;
</span>?>
Copier après la connexion

  结果如下图:

  

  

  我们回到上面的命令行,如果随便输出一个非-v的字符,就会出现错误,所以我们还需要把代码完善下。 

<span style="color: #800080;">$p</span> = <span style="color: #800080;">$argv</span>[1];  <span style="color: #008000;">//</span><span style="color: #008000;">获取参数</span>
<span style="color: #0000ff;">if</span>(<span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,0,1)=='-')     <span style="color: #008000;">//</span><span style="color: #008000;">  代表获取并匹配变量,</span>
<span style="color: #000000;">    {
      </span><span style="color: #008000;">//</span><span style="color: #008000;">如果传过来的是-v,就会变成v</span>
        <span style="color: #800080;">$p</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$p</span>,1<span style="color: #000000;">);
        </span><span style="color: #800080;">$result</span> =<span style="color: #0000ff;">isset</span>(godinit::$<span style="color: #800080;">$p</span>)?godinit::<span style="color: #800080;">$p</span>:<span style="color: #000000;">error;
    }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
        </span><span style="color: #800080;">$result</span> = godinit::<span style="color: #800080;">$p</span><span style="color: #000000;">();
    }</span>  
Copier après la connexion

  这里我们将要用到一个PHP魔法函数 __callStatic($m,$args) 。这个方法如果你要用,必须写到类里面,且必须是static。它的作用是,如果你调用了一个未定义的静态方法,则会自动触发这个函数。 第一个参数是 方法名,第二个参数是方法参数。我们可以用它来做一个容错处理(只要学到这个地步),在godinit文件中,我们加入这个方法:

<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){
    </span><span style="color: #0000ff;">echo</span> '$p1'<span style="color: #000000;">;
}<br></span>
Copier après la connexion

  然后,我们看看结果:

  

  现在再来看一般类定义和实例化以及调用,在我们新建一个godconfig文件,创建一个只有属性的godconfig类

<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> godconfig
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$prj_name</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$prj_author</span><span style="color: #000000;">;
    
}
</span>?>
Copier après la connexion

  在godinit里的实例化类godconfig,使用 1、json_encode(实例化过后的类):返回一个json格式的字符串 2、json_decode(json字符串) : 返回一个对象。

<span style="color: #000000;">php

</span><span style="color: #0000ff;">require</span>('godconfig.php');                <span style="color: #008000;">//</span><span style="color: #008000;">引入gonconfig这个文件</span>
<span style="color: #0000ff;">class</span> godinit                           <span style="color: #008000;">//</span><span style="color: #008000;">创建一个类,godinit</span>
<span style="color: #000000;">{
    </span><span style="color: #0000ff;">static</span>  <span style="color: #800080;">$v</span>="god version is 1.2";     <span style="color: #008000;">//</span><span style="color: #008000;">声明一个静态属性$VERSION</span>

    <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> init()               <span style="color: #008000;">//</span><span style="color: #008000;">静态方法 init</span>
<span style="color: #000000;">    {
        </span><span style="color: #800080;">$gc</span> = <span style="color: #0000ff;">new</span> godconfig();          <span style="color: #008000;">//</span><span style="color: #008000;">实例化godconfig里定义的类</span>
        <span style="color: #0000ff;">echo</span> "input your project name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$gc</span> -> prj_name = <span style="color: #008080;">fgets</span>(STDIN);            <span style="color: #008000;">//</span><span style="color: #008000;">从标准输入中获取用户输入的字符并赋值给实例化属性$prj_name</span>

        <span style="color: #0000ff;">echo</span> "input your author name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$gc</span> -> prj_author=<span style="color: #008080;">fgets</span><span style="color: #000000;">(STDIN);

        </span><span style="color: #800080;">$ret</span> = <span style="color: #0000ff;">array</span>();                 <span style="color: #008000;">//</span><span style="color: #008000;">初始化一个数组;</span>
        <span style="color: #800080;">$ret</span>[] = <span style="color: #800080;">$gc</span><span style="color: #000000;">;
        </span><span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$ret</span><span style="color: #000000;">);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">return ""</span>
<span style="color: #000000;">    }
    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){
        </span><span style="color: #0000ff;">echo</span> "error function"<span style="color: #000000;">;
    }
}
</span>?>
Copier après la connexion

  然后我们看结果:

  

 

 

恶补几个简单的知识点:

()?():();

substr();

isset();

__callStatic($m,$args) 

json_encode()

json_decode() 

 

版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。

 

上一课:沈逸老师PHP魔鬼特训笔记(3)

 

下一课:

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)