>백엔드 개발 >PHP 튜토리얼 >PHP 객체지향 Essentials_php 기술 요약

PHP 객체지향 Essentials_php 기술 요약

WBOY
WBOY원래의
2016-05-16 20:32:44960검색

이 기사의 예는 PHP 객체 지향 프로그래밍의 본질을 요약합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

1 상속을 구현하기 위해 확장을 사용하고 오버로딩의 의미와 매직 메서드

클래스 B가 A를 확장합니다
선언할 때 B는 A의 메소드를 가질 필요가 없습니다
전화할 때:

$b=new B();
A의 $b->Method();
$b->A=1;의 속성
B의 $b->Method();
B의 $b->Method();

$a=new A();

A의 $a->Method();
$a->A=1;의 속성
불가능
B의 $a->Method();
B의 $a->Method();

오버로딩: B는 A를 상속하고 B는 A와 동일한 이름을 가진 메서드 특성을 구현합니다.
PHP의 "오버로딩"은 대부분의 다른 객체 지향 언어와 다릅니다. 전통적인 "오버로딩"은 동일한 이름을 가진 여러 클래스 메서드를 제공하는 데 사용되지만 각 메서드에는 매개 변수 유형과 번호가 다릅니다.

매직 메소드: PHP는 __(두 개의 밑줄)로 시작하는 모든 클래스 메소드를 매직 메소드로 처리합니다. 따라서 자신만의 클래스 메서드를 정의할 때 앞에 __를 붙이지 마세요.

2 개인 및 보호 액세스 수정자의 가시성 상속

개인 속성 메소드는 상속될 수 없습니다
속성 메서드 보호 클래스는 외부에 표시되지 않으며 상속될 수 있습니다
공용 속성 메서드로 정의된 클래스 멤버는 어디서나 액세스할 수 있습니다

php에서 이중 콜론의 3가지 응용::

"::" 연산자는 PHP 클래스 코드에서 자주 볼 수 있습니다. 이는 범위 제한 연산자로, 클래스 내 다양한 ​​범위의 수준을 설정하는 데 사용됩니다. 왼쪽은 범위이고 오른쪽은 액세스 범위의 멤버입니다.
PHP에는 self와 parent라는 두 가지 범위가 정의되어 있습니다(정적 범위는 PHP6에서 제공됨).

범위 확인 연산자(Paamayim Nekudotayim이라고도 함) 또는 보다 간단히 콜론 쌍을 사용하여 정적 멤버, 메서드 및 상수에 액세스할 수 있으며 하위 클래스에서 부모 클래스의 멤버 및 메서드를 재정의하는 데 사용할 수도 있습니다.

코드 복사 코드는 다음과 같습니다.
class MyClass {
const CONST_VALUE = '상수값';
}

echo MyClass::CONST_VALUE;
class OtherClass는 MyClass를 확장합니다
{
공개 정적 $my_static = '정적 var';

공개 정적 함수 doubleColon() {
에코 부모::CONST_VALUE . "n";
echo self::$my_static . "n";
}
}

OtherClass::doubleColon();
//하위 클래스가 상위 클래스를 재정의합니다
클래스 마이클래스
{
보호된 함수 myFunc() {
           echo "MyClass::myFunc()n";
}
}

class OtherClass는 MyClass를 확장합니다
{
// 상위 클래스의 메서드를 재정의합니다
공개 함수 myFunc()
{
​​​​ //그러나 재정의된 메서드는 계속 호출될 수 있습니다
         parent::myFunc();
           echo "OtherClass::myFunc()n";
}
}

$class = 새로운 OtherClass();
$class->myFunc();

4 PHP에서 이것의 역할, 자기와 부모

이것은 현재 객체 인스턴스에 대한 포인터이며 다른 객체나 클래스를 가리키지 않습니다.
self: 현재 클래스의 범위를 나타냅니다. 이와 달리 클래스의 특정 인스턴스를 나타내지 않습니다. Self는 클래스 외부의 코드에서 사용할 수 없으며 상속 계층에서 자신의 위치를 ​​식별할 수 없습니다. 즉, 확장 클래스에서 self를 사용하면 상위 클래스의 메서드를 호출하지 않고 확장 클래스의 오버로드된 메서드를 호출합니다. Self는 클래스 자체를 가리킵니다. 즉, self는 인스턴스화된 개체를 가리키지 않습니다. 일반적으로 self는 클래스의 정적 변수를 가리키는 데 사용됩니다.

코드 복사 코드는 다음과 같습니다.
private static $firstCount = 0;
비공개 $lastCount;

//생성자
함수 __construct()
{
$this->lastCount = self:$firstCount; //self를 사용하여 정적 변수를 호출할 때는 다음을 사용해야 합니다::(필드 연산 기호)
}


parent: 현재 클래스의 부모 클래스의 범위를 나타내며, 나머지는 self 속성과 동일하다. parent는 상위 클래스에 대한 포인터입니다. 일반적으로 parent를 사용하여 상위 클래스의 생성자를 호출합니다.
코드 복사 코드는 다음과 같습니다.
//상속 클래스 생성자
함수 __construct( $personSex, $personAge )
{
parent::__construct( "test" ); //부모를 사용하여 부모 클래스의 생성자를 호출합니다.
            $this->personSex = $personSex;
             $this->personAge = $personAge;
}

5 생성자와 소멸자

생성자가 있는 클래스는 객체가 생성될 때마다 이 메서드를 먼저 호출하므로 객체를 사용하기 전에 몇 가지 초기화 작업을 수행하는 것이 매우 적합합니다.
함수 __construct() {}
하위 클래스에 생성자가 정의된 경우 해당 상위 클래스의 생성자는 암시적으로 호출되지 않습니다. 상위 클래스의 생성자를 실행하려면 하위 클래스의 생성자에서 parent::__construct()를 호출해야 합니다.
PHP 5에서는 C와 같은 다른 객체지향 언어와 마찬가지로 소멸자 개념을 도입했습니다. 소멸자는 객체에 대한 모든 참조가 제거되거나 객체가 명시적으로 소멸될 때 실행됩니다.
함수 __destruct() {}

최종 키워드 6개

PHP 5에는 새로운 최종 키워드가 추가되었습니다. 상위 클래스의 메서드가 final로 선언되면 하위 클래스는 해당 메서드를 재정의할 수 없습니다. 클래스가 final로 선언되면 상속될 수 없습니다.

7 상속과 생성자

父类 子类 结果
有构造函数 无构造函数 父构造
有构造函数 有构造函数 子构造


8개 인터페이스

표준 클래스를 정의하는 것처럼 인터페이스를 통해 인터페이스를 정의할 수 있습니다.
참고:
1) 그러나 여기에 정의된 모든 메소드는 비어 있습니다.
2) 인터페이스에 정의된 모든 메소드는 공용이어야 하며 이는 인터페이스의 특징입니다.
3) 여러 인터페이스를 구현할 때 인터페이스의 메소드는 동일한 이름을 가질 수 없습니다.
4) 확장 연산자를 사용하여 인터페이스를 상속할 수도 있습니다.
5) 인터페이스에서 상수를 정의할 수도 있습니다. 인터페이스 상수와 클래스 상수는 정확히 동일하게 사용됩니다. 이는 모두 고정된 값이며 하위 클래스나 하위 인터페이스에서 수정할 수 없습니다.

코드 복사 코드는 다음과 같습니다.
// 'iTemplate' 인터페이스 선언
iTemplate 인터페이스
{
공용 함수 setVariable($name, $var);
공개 함수 getHtml($template);
}
// 인터페이스 구현
//다음글이 맞습니다
클래스 템플릿은 iTemplate을 구현합니다
{
비공개 $vars = array();

공용 함수 setVariable($name, $var)
{
            $this->vars[$name] = $var;
}

공개 함수 getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}

          $template 반환;
}
}

9가지 속성

클래스의 변수 멤버를 "속성"이라고 합니다. 속성 선언은 public, protected 또는 private 키워드로 시작하고 그 뒤에 변수가 옵니다. 속성의 변수는 초기화가 가능하지만, 초기화되는 값은 상수여야 합니다. 여기서 상수는 컴파일 단계 이후 실행 단계에서 계산되는 상수가 아니라 PHP 스크립트가 컴파일 단계에 있는 상수를 의미합니다.
PHP5에서는
을 얻기 위해 "__get()"과 "__set()" 두 함수가 미리 정의되어 있습니다. 해당 속성을 가져오고 할당할 뿐만 아니라 "__isset()"을 사용하여 속성을 확인하고 "__unset()"을 사용하여 속성을 삭제합니다.
간단히 말하면, 하나는 가치를 얻기 위한 것이고, 다른 하나는 가치를 부여하기 위한 것입니다. , "__set()" 및 "__get()" 두 메서드는 기본적으로 존재하지 않지만 생성자 메서드(__construct())와 마찬가지로 클래스에 수동으로 추가됩니다. 물론, 개인 스타일에 따라 이 두 메서드를 추가할 수도 있습니다. //__get() 메서드는 비공개 속성을 얻는 데 사용됩니다.

코드 복사 코드는 다음과 같습니다.
클래스 사람{
//다음은 people의 회원 속성입니다
개인 $name; //사람 이름
private $sex; //사람의 성별
private $age; //나이
//__get() 메소드는 개인 속성을 얻는 데 사용됩니다
개인 함수 __get($property_name){
if(isset($this->$property_name)){
return($this->$property_name);}else {
반환(NULL)
}
}
}
//__set() 메소드는 개인 속성을 설정하는 데 사용됩니다
개인 함수 __set($property_name, $value){
$this->$property_name = $값
}
//__isset() 메서드
개인 함수 __isset($nm){
echo "isset() 함수가 비공개 멤버를 결정하면 자동으로 호출됩니다.
return isset($this->$nm)
}
//__unset() 메서드
개인 함수 __unset($nm){
echo "비공개 멤버를 삭제하기 위해 클래스 외부에서 unset() 함수를 사용할 때 자동으로 호출됩니다.
"; 설정 해제($this->$nm)
}
}
$p1=새 사람()
$p1->name="사람 이름입니다"
//isset() 함수를 사용하여 private 멤버를 측정할 때 __isset() 메서드가 자동으로 호출되어 이를 완료하는 데 도움이 되며 반환 결과는 true입니다.
echo var_dump(isset($p1->name))."
"
echo $p1->name."
"; //unset() 함수를 사용하여 비공개 멤버를 삭제할 때 __unset() 메서드가 자동으로 호출되어 작업을 완료하고 이름 비공개 속성을 삭제할 수 있도록 도와줍니다.
unset($p1->이름)
//삭제되었으므로 이 줄에 대한 출력은 없습니다
에코 $p1->이름
?>

코드 복사 코드는 다음과 같습니다.
클래스 사람{
//다음은 people의 회원 속성입니다
비공개 $name;
//사람 이름
비공개 $sex;
//사람의 성별
비공개 $age;
//나이
//__get() 메소드는 개인 속성을 얻는 데 사용됩니다
개인 함수 __get($property_name){
if(isset($this->$property_name)){
return($this->$property_name);
}그밖에{
return(NULL);
}
}
}
//__set() 메소드는 개인 속성을 설정하는 데 사용됩니다
개인 함수 __set($property_name, $value){
$this->$property_name = $value;
}
//__isset() 메소드
개인 함수 __isset($nm){
echo "isset() 함수가 비공개 멤버를 결정하면 자동으로 호출됩니다
";
return isset($this->$nm);
}
//__unset() 메소드
개인 함수 __unset($nm){
echo "비공개 멤버를 삭제하기 위해 클래스 외부에서 unset() 함수를 사용할 때 자동으로 호출됩니다
";
unset($this->$nm);
}
}
$p1=새 사람()
$p1->name="사람 이름입니다";
//isset() 함수를 사용하여 전용 멤버를 측정할 때 __isset() 메서드가 자동으로 호출되어 이를 완료하는 데 도움이 되며 반환 결과는 true입니다
echo var_dump(isset($p1->name))."
";
echo $p1->name."
";
//unset() 함수를 사용하여 비공개 멤버를 삭제할 때 __unset() 메서드가 자동으로 호출되어 작업을 완료하고 이름 비공개 속성을 삭제할 수 있도록 도와줍니다.
unset($p1->name);
//삭제되었으므로 이 줄에 대한 출력은 없습니다
에코 $p1->이름
?>

10개의 클론

객체 복사는 clone 키워드를 통해 완료할 수 있습니다(객체에 __clone() 메서드가 있으면 먼저 호출됩니다). 객체의 __clone() 메서드는 직접 호출할 수 없습니다.

객체가 복사되면 PHP5는 객체의 모든 속성에 대해 "얕은 복사"를 수행합니다. 속성의 모든 참조는 변경되지 않고 원래 변수를 가리킵니다. __clone() 메서드가 정의된 경우 새로 생성된 객체(복사로 생성된 객체)의 __clone() 메서드가 호출되며 필요한 경우 속성 값을 수정하는 데 사용할 수 있습니다.

이 기사가 모든 사람의 PHP 객체 지향 프로그래밍에 도움이 되기를 바랍니다.

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