모바일 앱 인터페이스 프로그래밍 기술 - PHP 클래스의 다른 기능을 구현하는 방법을 배웁니다.

WBOY
풀어 주다: 2016-07-30 13:31:23
원래의
996명이 탐색했습니다.

  • 정적 정적 키워드

    정적. 클래스에서 표시된 변수나 메서드는 어떤 개체에도 속하지 않습니다. 접근시 "::"를 사용하세요. 클래스에서 self를 호출할 때는 "self::"를 사용하세요.
    예:

<code><span><span><?php</span><span><span>class</span><span>Car</span> {</span><span>private</span><span>static</span><span>$speed</span> = <span>10</span>;

    <span>public</span><span><span>function</span><span>getSpeed</span><span>()</span> {</span><span>return</span><span>self</span>::<span>$speed</span>;
    }

    <span>//在这里定义一个静态方法,实现速度累加10</span><span>public</span><span>static</span><span><span>function</span><span>speedUp</span><span>()</span>
    {</span><span>return</span><span>self</span>::<span>$speed</span> += <span>10</span>;
    }
}

<span>$car</span> = <span>new</span> Car();
Car::speedUp();  <span>//调用静态方法加速</span><span>echo</span><span>$car</span>->getSpeed();  <span>//调用共有方法输出当前的速度值</span></span></span></code>
로그인 후 복사

정적 메서드는 변수를 통해 동적으로 호출할 수도 있습니다.

<code><span>$func</span> = <span>'getSpeed'</span>;
<span>$className</span> = <span>'Car'</span>;
<span>echo</span><span>$className</span>::<span>$func</span>();  <span>//动态调用静态方法</span></code>
로그인 후 복사
  • 액세스 제어

액세스 제어는 public, protected 및 private 키워드를 통해 구현됩니다. public으로 정의된 클래스 멤버는 어디에서나 액세스할 수 있습니다. protected로 정의된 클래스 멤버는 자체, 하위 클래스 및 상위 클래스에서 액세스할 수 있습니다. private으로 정의된 클래스 멤버는 해당 멤버가 정의된 클래스에서만 액세스할 수 있습니다.

클래스 속성은 공개, 보호 또는 비공개 중 하나로 정의되어야 합니다.

클래스의 메서드는 공개, 비공개 또는 보호로 정의될 수 있습니다. 이러한 키워드가 설정되지 않은 경우 메서드는 기본적으로 public으로 설정됩니다.

생성자가 프라이빗 메서드로 정의된 경우 객체를 직접 인스턴스화하는 것은 허용되지 않습니다. 이때 일반적으로 정적 메서드를 통해 인스턴스화됩니다. 이 메서드는 생성을 제어하기 위해 디자인 패턴에서 자주 사용됩니다. 예를 들어, 싱글턴 패턴은 전역적으로 고유한 객체 하나만 허용합니다.

<code><span><span>class</span><span>Car</span> {</span><span>private</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>echo</span><span>'object create'</span>;
    }

    <span>private</span><span>static</span><span>$_object</span> = <span>null</span>;
    <span>public</span><span>static</span><span><span>function</span><span>getInstance</span><span>()</span> {</span><span>if</span> (<span>empty</span>(<span>self</span>::<span>$_object</span>)) {
            <span>self</span>::<span>$_object</span> = <span>new</span> Car(); 
            <span>//内部方法可以调用私有方法,因此这里可以创建对象</span>
        }
        <span>return</span><span>self</span>::<span>$_object</span>;
    }
}
<span>//$car = new Car(); //这里不允许直接实例化对象</span><span>$car</span> = Car::getInstance(); <span>//通过静态方法来获得一个实例</span></code>
로그인 후 복사
  • 상속됨
<code><span><span><?php</span><span><span>class</span><span>Car</span> {</span><span>public</span><span>$speed</span> = <span>0</span>; <span>//汽车的起始速度是0</span><span>public</span><span><span>function</span><span>speedUp</span><span>()</span> {</span><span>$this</span>->speed += <span>10</span>;
        <span>return</span><span>$this</span>->speed;
    }
}
<span>//定义继承于Car的Truck类</span><span><span>class</span><span>Truck</span><span>extends</span><span>Car</span>{</span><span>public</span><span><span>function</span><span>speedUp</span><span>()</span> {</span><span>$this</span>->speed = <span>parent</span>::speedUp() + <span>50</span>;
    }
}

<span>$car</span> = <span>new</span> Truck();
<span>$car</span>->speedUp();
<span>echo</span><span>$car</span>->speed;</span></span></code>
로그인 후 복사
  • 오버로딩

PHP에서 오버로딩은 동적 생성을 의미하며 속성과 메서드가 구현됩니다. 마법의 방법을 통해. 속성 오버로드에서는 __set, __get, __isset 및 __unset을 사용하여 각각 할당, 읽기, 속성 설정 여부 확인, 속성이 존재하지 않는 경우 속성 삭제를 구현합니다.

<code><span><span>class</span><span>Car</span> {</span><span>private</span><span>$ary</span> = <span>array</span>();

    <span>public</span><span><span>function</span><span>__set</span><span>(<span>$key</span>, <span>$val</span>)</span> {</span><span>$this</span>->ary[<span>$key</span>] = <span>$val</span>;
    }

    <span>public</span><span><span>function</span><span>__get</span><span>(<span>$key</span>)</span> {</span><span>if</span> (<span>isset</span>(<span>$this</span>->ary[<span>$key</span>])) {
            <span>return</span><span>$this</span>->ary[<span>$key</span>];
        }
        <span>return</span><span>null</span>;
    }

    <span>public</span><span><span>function</span><span>__isset</span><span>(<span>$key</span>)</span> {</span><span>if</span> (<span>isset</span>(<span>$this</span>->ary[<span>$key</span>])) {
            <span>return</span><span>true</span>;
        }
        <span>return</span><span>false</span>;
    }

    <span>public</span><span><span>function</span><span>__unset</span><span>(<span>$key</span>)</span> {</span><span>unset</span>(<span>$this</span>->ary[<span>$key</span>]);
    }
}
<span>$car</span> = <span>new</span> Car();
<span>$car</span>->name = <span>'汽车'</span>;  <span>//name属性动态创建并赋值</span><span>echo</span><span>$car</span>->name;
</code>
로그인 후 복사

메서드의 오버로드는 __call을 통해 구현됩니다. 존재하지 않는 메서드를 호출할 때 __call 메서드가 매개변수로 호출됩니다. 과부하.

<code>lass Car {
    <span>public</span><span>$speed</span> = <span>0</span>;

    <span>public</span><span><span>function</span><span>__call</span><span>(<span>$name</span>, <span>$args</span>)</span> {</span><span>if</span> (<span>$name</span> == <span>'speedUp'</span>) {
            <span>$this</span>->speed += <span>10</span>;
        }
    }
}
<span>$car</span> = <span>new</span> Car();
<span>$car</span>->speedUp(); <span>//调用不存在的方法会使用重载</span><span>echo</span><span>$car</span>->speed;</code>
로그인 후 복사
  • 클래스 객체 비교

객체 비교는 동일한 클래스의 두 인스턴스의 모든 속성이 동일한 경우 비교 연산자 "=="를 사용할 수 있습니다. 판단하려면 두 변수가 동일한 객체를 참조하는지 판단해야 할 때 합동 연산자 "==="를 사용하여 판단할 수 있습니다.

<code><span><span>class</span><span>Car</span> {</span>
}
<span>$a</span> = <span>new</span> Car();
<span>$b</span> = <span>new</span> Car();
<span>if</span> (<span>$a</span> == <span>$b</span>) <span>echo</span><span>'=='</span>;   <span>//true</span><span>if</span> (<span>$a</span> === <span>$b</span>) <span>echo</span><span>'==='</span>; <span>//false</span></code>
로그인 후 복사

객체 복사. 특별한 경우에는 clone 키워드를 통해 객체를 복사할 수 있으며, 이때 __clone 메서드가 호출되며 이 매직 메서드를 통해 속성 값이 설정됩니다. .

<code><span><span>class</span><span>Car</span> {</span><span>public</span><span>$name</span> = <span>'car'</span>;

    <span>public</span><span><span>function</span><span>__clone</span><span>()</span> {</span><span>$obj</span> = <span>new</span> Car();
        <span>$obj</span>->name = <span>$this</span>->name;
    }
}
<span>$a</span> = <span>new</span> Car();
<span>$a</span>->name = <span>'new car'</span>;
<span>$b</span> = <span>clone</span><span>$a</span>;
var_dump(<span>$b</span>);
</code>
로그인 후 복사

객체 직렬화는 데이터를 저장하거나 전송할 때 사용하는 직렬화 메서드를 통해 객체를 문자열로 직렬화한 후, 필요할 때 역직렬화를 통해 사용할 수 있도록 문자열을 객체로 역직렬화할 수 있습니다.

<code><span><span>class</span><span>Car</span> {</span><span>public</span><span>$name</span> = <span>'car'</span>;
}
<span>$a</span> = <span>new</span> Car();
<span>$str</span> = serialize(<span>$a</span>); <span>//对象序列化成字符串</span><span>echo</span><span>$str</span>.<span>'<br>'</span>;
<span>$b</span> = unserialize(<span>$str</span>); <span>//反序列化为对象</span>
var_dump(<span>$b</span>);
</code>
로그인 후 복사

저작권: 이 글은 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.

위에서는 모바일 앱 인터페이스 프로그래밍 기술을 소개했습니다. 내용의 측면을 포함하여 PHP 클래스의 다른 기능을 구현하는 방법을 배우는 것이 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿