> php教程 > php手册 > 프론트 엔드 학습 PHP - 객체 지향 시리즈 5부 - 객체 작업

프론트 엔드 학습 PHP - 객체 지향 시리즈 5부 - 객체 작업

WBOY
풀어 주다: 2016-11-16 10:24:02
원래의
1298명이 탐색했습니다.
×
목차
[1] 객체 복제 [2] 객체 비교 [3] 객체 직렬화 [4] json

이전 단어

이 글에서는 주로 객체지향의 일부 객체 연산을 소개합니다

객체 복제

객체 복제라고도 하는 객체 복사는 clone 키워드를 통해 수행할 수 있습니다.

대부분의 경우 개체의 속성을 얻기 위해 개체를 완전히 복사할 필요는 없습니다. 그러나 실제로 필요한 상황이 하나 있습니다. 창 관련 리소스를 보유하는 창 개체가 있는 경우입니다. 원래 창과 동일한 속성을 모두 유지하면서 새 창을 복사할 수 있지만 새 개체여야 합니다(새 개체가 아닌 경우 한 창의 변경 사항이 다른 창에 영향을 미치기 때문입니다). 또 다른 상황이 있습니다. 객체 A가 객체 B에 대한 참조를 저장하는 경우 객체 A를 복사하고 여기에 사용된 객체가 더 이상 객체 B가 아니라 B의 복사본이 되도록 하려면 객체 A의 복사본을 가져와야 합니다. .

<?<span style="color: #000000;">php
    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Person{
        </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$name</span><span style="color: #000000;">;
        </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$sex</span><span style="color: #000000;">;
        </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$age</span><span style="color: #000000;">;
        </span><span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$name</span>="",<span style="color: #800080;">$sex</span>="",<span style="color: #800080;">$age</span>=1<span style="color: #000000;">){
            </span><span style="color: #800080;">$this</span>->name= <span style="color: #800080;">$name</span><span style="color: #000000;">;
            </span><span style="color: #800080;">$this</span>->sex = <span style="color: #800080;">$sex</span><span style="color: #000000;">;
            </span><span style="color: #800080;">$this</span>->age = <span style="color: #800080;">$age</span><span style="color: #000000;">;
        }
        </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> say(){
            </span><span style="color: #0000ff;">echo</span> "我的名字:" .<span style="color: #800080;">$this</span>->name.",性别:".<span style="color: #800080;">$this</span>->sex.",年龄:".<span style="color: #800080;">$this</span>->age."<br>"<span style="color: #000000;">;
        }
    }
    </span><span style="color: #800080;">$p1</span> = <span style="color: #0000ff;">new</span> Person('张三','男','20'<span style="color: #000000;">);
    </span><span style="color: #800080;">$p2</span> = <span style="color: #0000ff;">clone</span> <span style="color: #800080;">$p1</span><span style="color: #000000;">;
    </span><span style="color: #800080;">$p1</span>->say();<span style="color: #008000;">//</span><span style="color: #008000;">我的名字:张三,性别:男,年龄:20</span>
    <span style="color: #800080;">$p2</span>->say();<span style="color: #008000;">//</span><span style="color: #008000;">我的名字:张三,性别:男,年龄:20</span>
?>
로그인 후 복사

객체 비교

비교 연산자(==)를 사용하여 두 개체 변수를 비교할 때 비교 원칙은 두 개체의 속성과 속성 값이 동일하고 두 개체가 동일한 클래스의 인스턴스인 경우입니다. 이면 두 개체 개체 변수가 동일합니다.

항등 연산자(===)를 사용하는 경우 이 두 객체 변수는 특정 클래스의 동일한 인스턴스(즉, 동일한 객체)를 가리켜야 합니다.

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">function</span> bool2str(<span style="color: #800080;">$bool</span><span style="color: #000000;">)
{
    </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$bool</span> === <span style="color: #0000ff;">false</span><span style="color: #000000;">) {
        </span><span style="color: #0000ff;">return</span> 'FALSE'<span style="color: #000000;">;
    } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
        </span><span style="color: #0000ff;">return</span> 'TRUE'<span style="color: #000000;">;
    }
}
</span><span style="color: #0000ff;">function</span> compareObjects(&<span style="color: #800080;">$o1</span>, &<span style="color: #800080;">$o2</span><span style="color: #000000;">)
{
    </span><span style="color: #0000ff;">echo</span> 'o1 == o2 : ' . bool2str(<span style="color: #800080;">$o1</span> == <span style="color: #800080;">$o2</span>) . "\n"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> 'o1 != o2 : ' . bool2str(<span style="color: #800080;">$o1</span> != <span style="color: #800080;">$o2</span>) . "\n"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> 'o1 === o2 : ' . bool2str(<span style="color: #800080;">$o1</span> === <span style="color: #800080;">$o2</span>) . "\n"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> 'o1 !== o2 : ' . bool2str(<span style="color: #800080;">$o1</span> !== <span style="color: #800080;">$o2</span>) . "\n"<span style="color: #000000;">;
}
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Flag
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$flag</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">function</span> Flag(<span style="color: #800080;">$flag</span> = <span style="color: #0000ff;">true</span><span style="color: #000000;">) {
        </span><span style="color: #800080;">$this</span>->flag = <span style="color: #800080;">$flag</span><span style="color: #000000;">;
    }
}
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> OtherFlag
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$flag</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">function</span> OtherFlag(<span style="color: #800080;">$flag</span> = <span style="color: #0000ff;">true</span><span style="color: #000000;">) {
        </span><span style="color: #800080;">$this</span>->flag = <span style="color: #800080;">$flag</span><span style="color: #000000;">;
    }
}

</span><span style="color: #800080;">$o</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Flag();
</span><span style="color: #800080;">$p</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Flag();
</span><span style="color: #800080;">$q</span> = <span style="color: #800080;">$o</span><span style="color: #000000;">;
</span><span style="color: #800080;">$r</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> OtherFlag();
</span><span style="color: #008000;">/*</span><span style="color: #008000;">
Two instances of the same class
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">echo</span> "Two instances of the same class\n"<span style="color: #000000;">;
compareObjects(</span><span style="color: #800080;">$o</span>, <span style="color: #800080;">$p</span><span style="color: #000000;">);
</span><span style="color: #008000;">/*</span><span style="color: #008000;">
Two references to the same instance
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">echo</span> "\nTwo references to the same instance\n"<span style="color: #000000;">;
compareObjects(</span><span style="color: #800080;">$o</span>, <span style="color: #800080;">$q</span><span style="color: #000000;">);
</span><span style="color: #008000;">/*</span><span style="color: #008000;">
Instances of two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">echo</span> "\nInstances of two different classes\n"<span style="color: #000000;">;
compareObjects(</span><span style="color: #800080;">$o</span>, <span style="color: #800080;">$r</span><span style="color: #000000;">);
</span>?>
로그인 후 복사

객체 직렬화

객체는 메모리에 저장되는 데이터 유형이며 일반적으로 객체를 생성한 프로그램이 종료되면 수명이 종료됩니다. 때로는 개체의 상태를 저장하고 필요할 때 개체를 복원해야 할 수도 있습니다. 객체는 자신의 상태를 설명하는 값을 작성하여 자신을 기록합니다. 이 프로세스를 객체 직렬화라고 합니다. 다음 두 가지 상황에서 객체를 직렬화해야 합니다. 1. 객체를 네트워크를 통해 전송해야 하는 경우 객체를 바이너리 문자열로 직렬화합니다. 2. 객체를 유지해야 하는 경우 객체를 직렬화하고 작성합니다. 파일이나 데이터베이스에

직렬화()

Serialize() - 직렬화, 바이트 스트림이 포함된 문자열을 반환합니다.

직렬화 해제()

unserialize() - 문자열을 PHP의 원래 객체 값으로 다시 변경할 수 있는 역직렬화

객체를 직렬화하면 객체의 모든 속성 변수와 클래스 이름 정보가 저장되지만 객체의 메소드는 저장되지 않습니다.

<?<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;"> classa.inc:</span>
  <span style="color: #0000ff;">class</span><span style="color: #000000;"> A {
      </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$one</span> = 1<span style="color: #000000;">;
      </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> show_one() {
          </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$this</span>-><span style="color: #000000;">one;
      }
  }
  
</span><span style="color: #008000;">//</span><span style="color: #008000;"> page1.php:</span>
  <span style="color: #0000ff;">include</span>("classa.inc"<span style="color: #000000;">);
  </span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> A;
  </span><span style="color: #800080;">$s</span> = <span style="color: #008080;">serialize</span>(<span style="color: #800080;">$a</span><span style="color: #000000;">);
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 把变量$s保存起来以便文件page2.php能够读到</span>
  <span style="color: #008080;">file_put_contents</span>('store', <span style="color: #800080;">$s</span><span style="color: #000000;">);

</span><span style="color: #008000;">//</span><span style="color: #008000;"> page2.php:</span>
  <span style="color: #0000ff;">include</span>("classa.inc"<span style="color: #000000;">);
  </span><span style="color: #800080;">$s</span> = <span style="color: #008080;">file_get_contents</span>('store'<span style="color: #000000;">);
  </span><span style="color: #800080;">$a</span> = <span style="color: #008080;">unserialize</span>(<span style="color: #800080;">$s</span><span style="color: #000000;">);
  </span><span style="color: #008000;">//</span><span style="color: #008000;"> 现在可以使用对象$a里面的函数 show_one()</span>
  <span style="color: #800080;">$a</span>-><span style="color: #000000;">show_one();
</span>?>
로그인 후 복사

json

json_encode

<span style="color: #0000ff;">string</span> json_encode ( <span style="color: #0000ff;">mixed</span> <span style="color: #800080;">$value</span> [, int <span style="color: #800080;">$options</span> = 0 [, int <span style="color: #800080;">$depth</span> = 512 ]] )
로그인 후 복사

json_encode() 메소드는 변수에 대해 JSON 인코딩을 수행합니다

<?<span style="color: #000000;">php
</span><span style="color: #800080;">$arr</span> = <span style="color: #0000ff;">array</span> ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5<span style="color: #000000;">);
</span><span style="color: #0000ff;">echo</span> json_encode(<span style="color: #800080;">$arr</span>);<span style="color: #008000;">//</span><span style="color: #008000;">{"a":1,"b":2,"c":3,"d":4,"e":5}</span>
?>
로그인 후 복사

json_decode

<span style="color: #0000ff;">mixed</span> json_decode ( <span style="color: #0000ff;">string</span> <span style="color: #800080;">$json</span> [, bool <span style="color: #800080;">$assoc</span> = <span style="color: #0000ff;">false</span> [, int <span style="color: #800080;">$depth</span> = 512 [, int <span style="color: #800080;">$options</span> = 0 ]]] )
로그인 후 복사

json_decode() 메서드는 JSON 형식의 문자열을 디코딩하고 JSON으로 인코딩된 문자열을 받아 PHP 변수로 변환합니다. assoc 매개변수가 TRUE이면 객체 대신 배열이 반환됩니다.

<?<span style="color: #000000;">php
</span><span style="color: #800080;">$json</span> = '{"a":1,"b":2,"c":3,"d":4,"e":5}'<span style="color: #000000;">;
</span><span style="color: #008000;">/*</span><span style="color: #008000;">
object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
 <span style="color: #008000;">*/</span>
<span style="color: #008080;">var_dump</span>(json_decode(<span style="color: #800080;">$json</span><span style="color: #000000;">));

</span><span style="color: #008000;">/*</span><span style="color: #008000;">
array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
 </span><span style="color: #008000;">*/</span>
<span style="color: #008080;">var_dump</span>(json_decode(<span style="color: #800080;">$json</span>, <span style="color: #0000ff;">true</span><span style="color: #000000;">));
</span>?>
로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿