머리말:
오늘은 PHP의 객체지향적 특성을 소개하겠습니다. 객체지향이라고 하면 프로세스지향을 언급해야겠습니다. 왜냐하면 제가 초보자였을 때는 차이점을 구분하지 못하는 경우가 많았기 때문입니다. 그렇다면 객체 지향과 프로세스 지향의 차이점은 무엇입니까? 간단히 소개하겠습니다.
객체 지향어떤 객체가 문제를 처리하는지에 집중하세요.
가장 큰 특징은 속성과 함수를 갖는 클래스로 구성되어 있으며, 해당 클래스에서 객체를 얻어 문제를 해결할 수 있다는 점입니다.
프로세스 중심문제 해결 과정에 집중하세요. 이 문제를 하나씩 해결하기 위해 일련의 프로세스를 사용한다는 것이 가장 큰 특징입니다.
객체지향과 프로세스지향의 차이점을 이해한 후, 객체지향 PHP의 기본 지식을 배워보겠습니다.
***이 장의 키워드: 객체 지향 기본, 캡슐화 및 상속, PHP 키워드, 싱글톤, 객체 직렬화 및 매직 메소드, 추상 클래스 및 추상 메소드, 인터페이스 및 다형성.
우리가 알아야 할 PHP 객체지향의 세 가지 주요 특징은 상속;
1. 객체지향의 기본 |
1. 클래스란 무엇인가요?
동일한 속성(특성)과 방법(행동)을 가진 일련의 개체 집합입니다. 클래스는 추상적인 개념입니다.
2. 객체란 무엇인가요?
클래스에서 얻은 특정 속성 값을 가진 개체를 객체라고 합니다. 대상은 특정 개인입니다.
예: 인간; 장산
3. 클래스와 객체의 관계는 무엇인가요?
클래스는 객체의 추상화입니다! 객체는 클래스의 구체화입니다!
클래스는 이 유형의 객체가 어떤 속성을 가지고 있는지 나타낼 뿐이며 특정 값을 가질 수 없으므로 클래스는 추상적입니다.
객체는 클래스의 모든 속성을 할당한 후 생성되는 특정 개체입니다.
2. 클래스 선언 및 인스턴스화
1. 클래스 선언 방법:
클래스 클래스 이름 {
액세스 수정자 $property[=기본값];
[액세스 수정자 ] 함수 메서드 (){}
}
2. 클래스 선언 시 주의 사항:
①클래스 이름은 영숫자와 밑줄로만 구성할 수 있으며, 숫자로 시작할 수 없으며 큰 낙타 표기법을 준수해야 합니다. rule;
②클래스 이름은 클래스로 수정해야 하며, 클래스 이름 뒤에 ()가 있으면 안 됩니다.
③속성은 반드시 접근 수정자가 있어야 하며, 메소드에는 접근 수정자가 없어도 됩니다.
3. 인스턴스화된 객체 및 객체 속성 메서드 호출:
$object name = new class name(); //()는
클래스 외부에서 속성 및 메서드 호출:
$Object name-> $Attribute name; //->를 사용하여 속성을 호출하는 경우 속성 이름에는 $ 기호
호출 속성 및 메소드가 포함될 수 없습니다.
$this -> $속성명;
3. 생성자
1. 생성자란?
생성자는 클래스의 특수 함수입니다. new 키워드를 사용하여 객체를 인스턴스화하는 것은 클래스의 생성자를 호출하는 것과 같습니다.
2. 생성자의 기능은 무엇인가요?
객체를 인스턴스화할 때 자동으로 호출되어 객체의 속성에 초기값을 할당하는 데 사용됩니다!
3. 생성자 작성 방법:
①생성자 이름은 클래스와 동일해야 합니다.
[public] function Person($name){
$this -> ;
}
②매직 메소드 사용 __construct
[public] function __construct($name){
$this -> name = $name;
}
4. :
①첫 번째 작성 방법은 생성자 이름과 클래스 이름이 동일해야 합니다! ! ! !
②클래스에 직접 작성한 생성자가 없으면 시스템에는 기본적으로 null 매개 변수 생성자가 있으므로 new Person()을 사용할 수 있습니다.
매개 변수가 있는 생성자를 작성하면 더 이상 null이 없습니다. 매개변수 생성, 즉 new Person()은 직접 사용할 수 없습니다.
Person은 생성자의 요구 사항을 충족해야 합니다. ! ! !
③두 생성자가 동시에 존재하는 경우 __construct가 사용됩니다.
5. 소멸자: __destruct():
① 소멸자는 객체가 파괴되고 해제되기 전에 자동으로 호출됩니다.
② 소멸자는 어떤 매개 변수도 사용할 수 없습니다. 개체가 사용된 후에는 리소스 등을 닫습니다.
6. 마법의 방법:
PHP는 __로 시작하는 일련의 함수를 제공합니다. 이러한 함수는 수동으로 호출할 필요가 없습니다.
이러한 유형의 함수는 자동으로 호출됩니다. 매직을 매직 기능이라고 합니다.
예: 새 객체가 생성될 때 __construct(){} 함수가 자동으로 호출됩니다.
객체가 삭제될 때 __destruct(){} 함수가 자동으로 호출됩니다.
매직 메서드 외에도 다음이 필요합니다. 사용자 정의 함수 및 메소드는 __로 시작할 수 없습니다.
마지막으로 일반적으로 더 복잡한 기능을 가진 클래스의 경우 별도의 클래스 파일에 작성합니다.
클래스 파일 이름은 "클래스 이름 소문자.class.php" 방식을 사용하여 동일한 소문자로 지정합니다.
이 클래스를 다른 파일에서 사용할 때 include를 사용하여 이 ".class.php" 파일을 가져올 수 있습니다.
2. 캡슐화 및 상속 |
3. PHP 키워드 |
1.final
①최종 수정 클래스, 이 클래스는 최종 클래스이므로 상속할 수 없습니다!
②최종 수정 방법, 이 방법은 최종 방법이므로 재정의할 수 없습니다!
③final은 속성을 수정할 수 없습니다.
2. static
① 정적 속성과 정적 메서드라고 하는 속성과 메서드를 수정할 수 있으며, 클래스 속성과 클래스 메서드라고도 합니다.
② 정적 속성과 정적 메서드는 클래스 이름만 사용할 수 있습니다. 직접 전화하세요.
"클래스 이름::$정적 속성", "클래스 이름::정적 메서드()"
Person::$sex; Person::say();
3정적 속성 및 메서드를 사용하세요. 클래스는 로드될 때 객체가 생성되기 전에 선언됩니다.
4정적 메서드에서는 비정적 속성이나 메서드를 호출할 수 없습니다.
비정적 메서드에서는 정적 속성과 메서드를 호출할 수 있습니다.
(클래스가 로드될 때 정적 속성과 메서드가 생성되었고, 비정적 속성 메서드는 아직 인스턴스화되지 않았기 때문입니다.)
⑤ 클래스에서는 self 키워드를 사용하여 클래스 이름을 참조할 수 있습니다. .
class Person{
static $sex = "nan";
function say(){
echo self::$sex;
}
}
⑥ 정적 속성은 다음과 같습니다. Shared 즉, new에 의해 생성된 많은 객체도 동일한 속성을 공유합니다.
3.const 키워드:
define() 함수가 아닌 클래스에 상수를 선언하세요! const 키워드를 사용해야 합니다.
define() 문과 유사하게 const 키워드는 상수를 선언하는 데 사용할 수 없으며 모두 대문자로 사용해야 합니다!
상수는 한번 선언되면 변경할 수 없습니다. 호출할 때 정적과 마찬가지로 클래스 이름을 사용하여 Person::constant를 호출합니다.
4.instanceof 연산자:
객체가 특정 클래스의 인스턴스인지 감지합니다. (아버지, 할아버지, 증조부 포함...)
$zhangsan instanceof Person;
[간단히 요약] 여러 특수 연산자
1. ""만 연결할 수 있습니다. 2. => 배열을 선언할 때 관련 키와 값 ["key"=>"value"]
3. -> 멤버 메소드;
4, ::
① 상위 클래스에서 동일한 이름의 메소드를 호출하려면 parent 키워드를 사용하십시오. parent::say()
② 클래스 이름(및 self)을 사용하십시오. 속성 클래스, 정적 메서드 및 상수에서 정적 메서드를 호출합니다.
4. 싱글턴 |
5.객체 직렬화 및 매직 메서드 |
***키워드: clone 및 __clone, __antoload(), 직렬화 및 역직렬화(직렬화 및 역직렬화), 유형 제약 조건, 매직 메서드 요약(12)
1 Clone 및 __clone
1. . 객체를 다른 객체에 할당하기 위해 =를 사용할 때 실제로 할당되는 것은 객체의 주소입니다.
두 개체가 동일한 주소를 가리키므로 한 개체가 변경되면 다른 개체도 변경됩니다.
예: $lisi = $zhangsan;
2. 한 객체를 다른 객체로 완전히 복제하려면 두 객체가 독립적이며 서로 간섭하지 않습니다.
복제를 사용해야 합니다. 키워드 ;
eg: $lisi = clone $zhangsan; //두 객체는 서로 간섭하지 않습니다
3.__clone():
① clone 키워드를 사용하여 객체를 복제할 때 clone 함수는 다음과 같습니다. 자동으로 호출됩니다.
②__clone() 함수는 복제할 때 사용되는 생성자와 유사하며 새로 복제된 객체에 초기 값을 할당할 수 있습니다.
3 __clone() 함수의 $this는 새로 복제된 객체를 참조합니다.
일부 버전에서는 $that을 사용하여 복제된 객체를 참조할 수 있지만 대부분의 버전에서는 이를 지원하지 않습니다.
4. __toString()
echo 및 기타 출력 문을 사용하여 객체를 직접 인쇄하는 경우 echo $zhangsan;
을 호출한 다음 __toString() 함수에서 반환되는 문자열을 지정할 수 있습니다. __toString( ){
return "haha";
}
echo $zhangsan; //결과는 다음과 같습니다. haha
5, __call()
class 를 사용하면 __call() 메서드가 자동으로 실행됩니다.
자동으로 실행되면 두 개의 매개변수가 __call() 메소드에 전달됩니다.
매개변수 1: 호출할 메소드의 이름
매개변수 2: 호출 메소드의 (배열) 매개변수 목록.
2.__antoload()
① 이것은 클래스에서 사용되지 않는 유일한 매직 메소드입니다.
② 존재하지 않는 클래스가 인스턴스화되면 이 매직 메소드가 자동으로 호출됩니다. ③Call 하면 매개변수가 자동으로 __autoload()에 전달됩니다: 인스턴스화된 클래스 이름
따라서 이 메서드를 사용하여 자동으로 파일을 로드하는 기능을 구현할 수 있습니다.
function __autoload($className){
include "class/".strtolower($className).".class.php";
}
$zhangsan=new Person();//this 파일에 Person 클래스가 없으면 __autoload()가 자동으로 실행되어 person.class.php 파일을 로드합니다
3. 직렬화 및 역직렬화(Serialization and Deserialization)
1. 직렬화: 일련의 작업을 통해 객체를 문자열로 변환하는 과정을 직렬화라고 합니다. 상태 설명)
2. 직렬화 해제: 직렬화된 문자열을 객체로 변환하는 과정을 직렬화 해제라고 합니다.
3.
①객체를 네트워크를 통해 전송해야 하는 경우
② 객체를 파일이나 데이터베이스에 유지해야 하는 경우
4 직렬화 및 역직렬화 구현 방법
Serialization: $ str=serialize($zhangsan) ;
Deserialization: $duixiang=unserialize($str);
5, __sleep() 매직 메서드:
①객체 직렬화를 실행하면 자동으로 __sleep() 함수가 실행됩니다.
②__sleep() 함수는 배열을 반환해야 합니다. 배열에 없는 속성은 직렬화할 수 없습니다.
function __sleep (){
return array("name"," age"); //이름/나이 두 가지 속성만 직렬화할 수 있습니다.
}
6.__wakeup() 매직 메소드
①객체를 deserialize할 때 __wakeup() 메소드가 자동으로 호출됩니다.
②자동으로 호출되면 생성된 새 객체를 deserialize하는 데 사용됩니다. 속성이 재할당됩니다.
function __wakeup(){
$this -> name = "lee思";
}
4. 유형 제약
1. 유형 제약: 변수 추가를 의미합니다. type은 해당 데이터 유형만 저장하도록 이 변수를 제한하는 데 사용됩니다.
(이 작업은 강력한 형식의 언어에서 일반적입니다. PHP에서는 배열 및 개체의 형식 제약 조건만 구현할 수 있습니다.)
2 형식 제약 조건이 특정 클래스인 경우 이 클래스와 이 클래스의 하위 클래스 개체입니다. , 통과할 수 있습니다.
3. PHP에서는 형식 제약 조건이 함수의 형식 매개 변수에서만 발생할 수 있습니다.
class Person{}
class Student 확장 Person{}
function func(Person $p){ //제약 함수의 형식 매개변수, Person 클래스와 Person 하위 클래스만 허용
echo "1111" ;
echo $p -> name;
}
func(new Person()) √
func(new Student()) √
func("111");
은 new Person() 형식이며, 이를 "익명 개체"라고 부릅니다.
※※※기본 클래스: 상위 클래스
※※※파생 클래스: 하위 클래스
5. 매직 메소드 요약
1. __construct(): 생성자, 객체가 새로 생성되면 자동으로 호출됩니다.
2.__destruct(): 객체가 파괴될 때 자동으로 호출되는 소멸자입니다.
3.__get(): 클래스의 개인 속성에 액세스할 때 자동으로 호출됩니다. 읽기 속성 이름을 전달하고 $this->속성 이름을 반환합니다
4. __set(): 클래스의 비공개 속성에 값을 할당할 때 자동으로 호출됩니다. 설정해야 하는 속성 이름과 속성 값을 전달합니다.
5. __isset(): 객체의 비공개 속성을 감지하기 위해 isset()을 사용할 때 자동으로 호출됩니다. 감지된 속성 이름을 전달하고 isset($this -> 속성 이름)을 반환합니다.
6. __unset(): 객체의 비공개 속성을 삭제하기 위해 unset()을 사용할 때 자동으로 호출됩니다. 삭제된 속성 이름을 전달하고
7 메소드에서 unset($this -> 속성 이름)을 실행합니다. __toString(): 객체를 인쇄하기 위해 echo를 사용할 때 자동으로 호출됩니다. 객체를 인쇄할 때 표시하려는 콘텐츠를 반환합니다. 반환은 문자열이어야 합니다.
8. __call(): 클래스에서 정의되지 않거나 공개되지 않은 메서드를 호출할 때 자동으로 호출됩니다. 호출된 함수 이름과 매개변수 목록 배열을 전달합니다.
9. __clone(): clone 키워드를 사용하여 객체를 복제할 때 자동으로 호출됩니다. 이 함수는 새로 복제된 객체에 값을 초기화하고 할당하는 것입니다. __sleep(): 객체가 직렬화될 때 자동으로 호출됩니다. 배열을 반환하며, 배열의 값은 직렬화될 수 있는 속성입니다. __wakeup(): 객체가 역직렬화될 때 자동으로 호출됩니다. 새로 생성된 객체를 역직렬화하려면 초기화 및 할당을 수행합니다.
12. __autoload(): 함수는 클래스 외부에서 선언되어야 합니다. 선언되지 않은 클래스가 인스턴스화되면 자동으로 호출됩니다. 인스턴스화된 클래스 이름을 전달하면 해당 클래스 파일이 클래스 이름을 사용하여 자동으로 로드될 수 있습니다.
1. 추상 메소드란 무엇인가요? 2.추상 클래스란 무엇인가요? 3. 추상 클래스에 대한 참고 사항: 4. 하위 클래스가 추상 클래스를 상속하는 경우 하위 클래스가 추상 클래스가 아닌 한 하위 클래스는 상위 클래스의 모든 추상 메서드를 재정의해야 합니다. 5. 추상 클래스를 사용하는 역할은 무엇인가요?
1. 인터페이스 2. 3. 인터페이스에서는 변수를 선언할 수 없으며, 속성만 사용할 수 있습니다. ! ! 4. 인터페이스는 확장 키워드를 사용하여 인터페이스를 상속할 수 있습니다! 5를 확장합니다. 클래스는 Implements 키워드를 사용하여 인터페이스를 구현할 수 있습니다! ※[인터페이스 && 추상 클래스의 차이점] 2. 다형성 2. 다형성을 달성하는 데 필요한 방법: |
위 내용은 PHP의 객체지향에 대한 나의 이해에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!