>php教程 >php手册 >Shen Yi 선생님의 특별 PHP 교육 노트(4)

Shen Yi 선생님의 특별 PHP 교육 노트(4)

WBOY
WBOY원래의
2016-08-30 09:21:121681검색

이전 강의에서는 쉘 스크립트를 통해 코드를 복사하고 정적 메소드와 정적 속성에 대해 배웠습니다. (액세서리 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>();

교사의 과정에 따라 요구사항을 구현해 보겠습니다. 매개변수에 "-"가 포함되어 있으면 속성이라는 의미입니다. 클래스의 정적 속성을 직접 호출합니다. "-"가 없으면 메소드임을 의미하며 클래스의 정적 메소드를 직접 호출합니다.

그래서 먼저 이전 수업에서 썼던 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>?>

결과는 아래와 같습니다.

 

 

 위의 명령줄로 돌아갑니다. -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>  

 여기에서는 PHP 매직 함수 __callStatic($m,$args)를 사용합니다. 이 메서드를 사용하려면 클래스에 작성해야 하며 정적이어야 합니다. 정의되지 않은 정적 메서드를 호출하면 이 함수가 자동으로 트리거됩니다. 첫 번째 매개변수는 메소드 이름이고, 두 번째 매개변수는 메소드 매개변수입니다. 내결함성을 위해 사용할 수 있습니다(이것을 배우는 한).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>

그럼 결과를 살펴보겠습니다.

 

 이제 일반적인 클래스 정의, 인스턴스화 및 호출을 살펴보겠습니다. 새로운 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>?>

 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>?>

 그럼 결과를 살펴보겠습니다.

 

간단한 지식 포인트 보충:

()? (): ()

substr();

isset();

__callStatic($m,$args) 

json_encode()

json_decode()

저작권 설명: 노트 정리함 Desperado는 자유를 사랑하고 공유를 옹호합니다. 하지만 이 메모는 Shen Yi 선생님의 www.jtthink.com (Programmer on the Road) "PHP 악마 훈련 과정의 첫 번째 단계"에서 가져온 것입니다. 이 학습 노트는 블로그에 처음 게시되었습니다. 다시 인쇄해야 하는 경우 선생님의 작업을 존중하고 Shen Yi 선생님의 서명과 강좌 소스 주소를 보관하시기 바랍니다.

이전 강의: Shen Yi 선생님의 특별 PHP 교육 노트(3)

다음 강의:

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