>백엔드 개발 >PHP 튜토리얼 >PHP 객체지향 기본

PHP 객체지향 기본

WBOY
WBOY원래의
2016-07-25 09:07:35770검색
  1. class Person
  2. {
  3. //다음은 person
  4. var $name; /사람 이름
  5. var $***; //사람 성별
  6. var $age; //사람 나이
  7. //다음은 사람의 멤버 메서드입니다
  8. function say() //이 사람 말할 수 있는 메소드
  9. {
  10. echo "이 사람이 말하고 있다";
  11. }
  12. function run() //걸을 수 있는 메소드
  13. {
  14. echo "이 사람이 여기 있다 Walk ";
  15. }
  16. }
  17. ?>
코드 복사

3.5. 객체 인스턴스화 방법

위에서 언급했듯이 PHP 객체지향 프로그램의 단위는 객체이지만 객체는 클래스를 통해 인스턴스화됩니다. 우리의 클래스가 선언될 것이므로 다음 단계는 객체를 인스턴스화하는 것입니다. 클래스를 정의한 후 new 키워드를 사용하여 객체를 생성합니다. $객체 이름 = 새 클래스 이름(); 개체->속성 $p1->name; $p3->***; 객체->메서드 $p1->say(); $p2->run();

5.7. 특수 참조 "$this" 사용 이제 개체 외부에서 개체의 멤버에 액세스하는 "Object->Member"를 통해 액세스하는 방법을 알았습니다. 그러면 객체에 있는 메서드가 객체 내부에 있는 이 객체의 속성에 액세스하도록 하거나 객체에 있는 메서드가 이 객체의 다른 메서드를 호출하도록 하려면 어떻게 해야 합니까? 객체의 내부 구성원 간의 호출을 포함하여 객체의 모든 구성원은 객체를 사용하여 호출되어야 하기 때문에 PHP는 이 객체에 대한 참조인 $this를 제공하고 각 객체에는 이 객체를 나타내는 $this가 있습니다. this의 원래 의미는 "this"입니다. 위의 예에서는 $P1, $P2 및 $P3라는 세 개의 인스턴스 개체를 인스턴스화합니다. $p1, $p2, $p3.

  1. class Person
  2. {
  3. //다음은 person
  4. var $name의 멤버 속성입니다. ; / /사람 이름
  5. var $***; //사람 성별
  6. var $age; //사람 나이
  7. //다음은 사람의 멤버 메서드입니다.
  8. 함수 say() / / 이 사람이 말할 수 있는 방법
  9. { ​​echo "내 이름은: ".$this->name." 성별: ".$this->***." 내 나이: ". age."
  10. ";
  11. }
코드 복사

8. 파기방법 및 방법 대부분의 클래스에는 생성자라는 특수 메서드가 있습니다. 객체가 생성되면 자동으로 생성자를 호출합니다. 즉, new 키워드를 사용하여 객체를 인스턴스화하면 생성자가 자동으로 호출됩니다.

생성자의 선언은 이름이 __construct()여야 한다는 점을 제외하면 다른 작업의 선언과 동일합니다. 이는 PHP5의 변경 사항입니다. 이전 버전에서는 생성자의 이름이 클래스 이름과 동일해야 합니다. 이는 PHP5에서도 계속 사용할 수 있지만 현재는 생성자를 사용할 수 있다는 장점이 있습니다. 클래스 이름과 관계없이 클래스 이름이 변경될 때 해당 생성자 이름을 변경할 필요가 없습니다. 이전 버전과의 호환성을 위해 클래스에 __construct()라는 메서드가 없으면 PHP는 클래스 이름과 동일한 이름을 가진 php4로 작성된 생성자 메서드를 검색합니다. 형식: function __construct ([매개변수]) { ... ... } 클래스에서는 하나의 생성자만 선언할 수 있지만 생성자는 객체가 생성될 때마다 한 번만 호출됩니다. 이 메서드는 적극적으로 호출할 수 없으므로 일반적으로 몇 가지 유용한 초기화 작업을 수행하는 데 사용됩니다. 예를 들어 해당 속성에는 객체 생성 시 초기값이 할당됩니다.

  1. //인간
  2. Person 클래스 생성
  3. {
  4. //다음은 의 구성원 속성입니다. the person
  5. var $name; //사람 이름
  6. var $***; //사람 성별
  7. var $age; //생성자 매개변수를 다음과 같이 정의합니다. name $name, sexual$*** and age$age
  8. function __construct($name, $***, $age)
  9. {
  10. //생성자 메서드를 통해 전달된 $name이 제공됩니다. 멤버 속성에 $ this->name에 초기값이 할당됩니다
  11. $this->name=$name;
  12. //생성 메소드를 통해 전달된 $***에 초기값이 할당됩니다. 멤버 속성 $this->*** 값 설정
  13. $this->***=$***;
  14. //생성자를 통해 전달된 $age에는 초기 값 $this->age ->age=$age;
  15. }
  16. //이 사람이 말하는 방식
  17. function say()
  18. {
  19. echo "내 이름은:".$this->name." 성별: ".$this->***." 내 나이: ".$this->age."
  20. ";
  21. }
  22. }
  23. / /구성 방법을 통해 $p1, p2, $p3 세 개의 객체를 생성하고 세 가지 실제 매개변수(이름, 성별, 나이)를 전달합니다
  24. $p1=new Person("Zhang 산", "남성", 20 );
  25. $p2=new Person("이사","女", 30);
  26. $p3=new Person("王五","남성", 40 );
  27. //아래 $p1 객체의 말하기 메소드에 액세스합니다
  28. $p1->say();
  29. //다음은 $p2 객체의 말하기 메소드에 액세스합니다
  30. $p2 ->say();
  31. / /다음은 $p3 객체의 speaking 메소드에 액세스합니다
  32. $p3->say();
  33. ?>
코드 복사
출력은 다음과 같습니다. 내 이름은: Zhang San 성별: 남자 내 나이: 20 내 이름은: Li Si 성별: 여성 내 나이: 30 내 이름은: Wang Wu 성별: 남자 내 나이: 40

생성자의 반대말은 소멸자입니다. 소멸자는 PHP5에 새로 추가된 내용입니다. PHP4에는 소멸자가 없습니다. 소멸자를 사용하면 클래스를 삭제하기 전에 파일 닫기, 결과 집합 해제 등과 같은 일부 작업을 수행하거나 일부 기능을 완료할 수 있습니다. 소멸자는 개체에 대한 모든 참조가 삭제되거나 개체가 명시적으로 삭제되면 삭제됩니다. 즉, 객체가 메모리에서 소멸되기 전에 소멸자가 호출됩니다. 생성자 이름과 마찬가지로 클래스 소멸자 이름은 __destruct()여야 합니다. 소멸자는 매개변수를 사용할 수 없습니다. 형식: function __destruct ( ) { ... ... }

  1. //인간

  2. Person 클래스
  3. 만들기{
  4. // 다음은 해당 개인의 구성원 속성입니다.
  5. var $name; //개인 이름
  6. var $***; //개인 성별
  7. var $age
  8. // 이름 $name, 성별 $*** 및 연령 $age

  9. 함수 __construct($name, $***, $age)

  10. 를 매개변수로 하는 생성자 메서드를 정의합니다. {
  11. //생성 메소드를 통해 전달된 $name은 $this->name
  12. $this->name=$name;
  13. //$* 멤버 속성에 초기 값을 할당합니다. 생성 메소드를 통해 전달됨 **멤버 속성 $this->***
  14. $this->***=$***;
  15. //The $age pass에 초기값 할당 in 구성 방법을 통해 멤버 속성 $this->age에 초기 값이 할당됩니다
  16. $this->age=$age;
  17. }
  18. //이 사람이 말하는 방식
  19. function say()
  20. {
  21. echo "내 이름은: ".$this->name." 성별: ".$this->***." 내 나이: ".$this ->age."
  22. ";
  23. }
  24. //이것은 소멸자입니다.
  25. 함수 __destruct()
  26. {
  27. echo "Goodbye".$this->를 호출하세요. "
  28. ";
  29.  }

코드 복사

클래스 외부에 인터페이스를 제공하는 경우 클래스 외부의 비공개 속성에 대한 설정 메서드 및 가져오기 메서드를 제공하여 비공개 속성을 조작할 수 있습니다. 예: prvate $age //Private attribute age;

  1. function setAge($age) //외부적으로 연령을 설정하는 공개 메소드 제공
  2. {
  3. if($age<0 || $ age>130) //속성에 값을 할당할 때 잘못된 값을 방지하기 위해
  4. return;
  5. $this->age=$age;
  6. 속성으로 설정됩니다. }
  7. function getAge() //외부에서 나이를 얻기 위한 공개 메소드 제공
  8. {
  9. return($this->age);
  10. }
코드 복사

위 방법은 구성원 속성에 대한 값을 설정하고 가져오는 것입니다. 물론 동일한 방법을 사용하여 각 속성에 대한 값을 할당하고 가져와 외부에서 액세스 작업을 완료할 수도 있습니다. 수업. JAVABEAN도 마찬가지입니다! ! !

10. __set() __get() __isset() __unset() 네 가지 메서드 적용

일반적으로 클래스 속성은 항상 비공개로 정의되며 이는 현실적인 논리에 더 부합합니다. 그러나 속성을 읽고 할당하는 작업은 매우 빈번하므로 PHP5에서는 속성을 가져오고 할당하기 위해 "__get()" 및 "__set()" 두 함수가 미리 정의되어 있고 속성을 확인하기 위해 "__isset"()"이 있습니다. 속성 "__unset()"을 삭제하는 방법입니다. 이전 섹션에서는 각 속성에 대한 메서드를 설정하고 획득했습니다. PHP5는 "__set()" 및 "__get()" 메서드에 대한 값을 설정하고 획득하기 위한 특수 메서드를 제공합니다. 기본적으로 클래스에 수동으로 추가됩니다. 생성자 메서드(__construct())와 마찬가지로 이 두 메서드는 클래스에 추가되는 경우에만 존재합니다. 물론 다음과 같은 방법으로 메서드를 추가할 수도 있습니다. 개인 스타일에 따라 추가할 수도 있습니다.

  1. //__get() 메소드는 개인 속성을 가져오는 데 사용됩니다.

  2. 개인 함수 __get($property_name)
  3. {
  4.   if(isset($this->$property_name))

  5. {
  6. return($this->$property_name);
  7. }else
  8. {
  9. return(NULL);
  10. }
  11. }
  12. //__set() 메서드는 개인 속성을 설정하는 데 사용됩니다
  13. 개인 함수 __set($property_name, $value)
  14. {
  15. $this->$property_name = $value;
  16. }
코드 복사

__get() 메소드: 프라이빗 멤버 속성의 값을 가져오는 데 사용되는 메소드입니다. 매개변수는 가져오려는 멤버 속성의 이름으로 전달되며, 가져온 속성 값이 반환됩니다. . 이 메서드를 수동으로 호출할 필요가 없습니다. 왜냐하면 이 메서드를 개인 속성을 직접 얻을 때 개체가 자동으로 호출하는 개인 메서드로 만들 수도 있기 때문입니다. 프라이빗 속성이 캡슐화되어 있기 때문에 값을 직접 얻을 수는 없지만(예: "echo $p1->name"은 직접 가져오는 것이 잘못됨) 클래스에 이 메서드를 추가하는 경우에는 "echo $p1->를 사용합니다. name". $p1->name" 이러한 문이 값을 직접 얻으면 자동으로 __get($property_name) 메서드를 호출하여 속성 이름을 $property_name 매개 변수에 전달하고 이 메서드의 내부 실행을 통해 우리가 전달한 사유 재산의 값이 반환됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. __set() 메소드: 프라이빗 멤버 속성에 대한 값을 설정하는 데 사용됩니다. 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 값을 설정하려는 속성의 이름입니다. 속성에 대해 설정되었습니다. 반환 값이 없습니다. 이 메소드는 수동으로 호출할 필요도 없으며, private 속성 값을 직접 설정할 때 자동으로 호출됩니다. __set() 메소드가 없으면 Not입니다. 예를 들어 $this->name='zhangsan'이면 오류가 발생하지만, 프라이빗 속성에 직접 값을 할당할 때 클래스에 __set($property_name, $value) 메서드를 추가하면 오류가 발생합니다. $property_name에 name과 같은 속성을 전달하고 $value에 할당할 값 "zhangsan"을 전달하여 자동으로 호출됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. 잘못된 값을 전달하지 않기 위해 이 방법으로 판단할 수도 있습니다.

  1. class Person
  2. {
  3. //다음은 person의 멤버 속성으로, 모두 비공개로 캡슐화되어 있습니다. member
  4. private $name; //사용자 이름
  5. private $***; //사용자 성별
  6. private $age; //사용자 나이
  7. //__get() 메서드 사용 개인 속성을 얻으려면
  8. 개인 함수 __get($property_name)
  9. {
  10. echo "개인 속성 값을 직접 얻을 때 이 __get() 메서드가 자동으로 호출됩니다.
  11. ";
  12. if(isset ($this->$property_name))
  13. {
  14. return($this->$property_name);
  15. }
  16. else
  17. {
  18. return(NULL);
  19. }
  20. }
  21. //__set() 메서드는 개인 속성을 설정하는 데 사용됩니다
  22. 개인 함수 __set($property_name, $value)
  23. {
  24. echo "개인 속성 값을 설정할 때 ​​직접적으로 __set() 메서드가 자동으로 호출되어 개인 속성
  25. ";
  26.  $this->$property_name = $value;
  27. }
  28. }
  29. $p1에 값을 할당합니다. =new Person( );
  30. //비공개 속성에 값을 직접 할당하면 __set() 메서드가 자동으로 호출되어 값을 할당합니다. age=20;
  31. //개인 속성 값을 직접 가져오면 __get() 메서드가 자동으로 호출되어 멤버 속성 값을 반환합니다
  32. echo "Name :".$p1->name ."
  33. ";
  34. echo "성별:".$p1->***."
  35. ";
  36. echo "나이:".$ p1->age."
  37. ";
  38. ?>
  39. 코드 복사
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.