기본 지식
클래스: 동일한 속성이나 메서드를 가진 클래스의 모음입니다. 예를 들어, Chevrolet 자동차는 Chevrolet 자동차 카테고리이고, Mercedes-Benz 자동차는 Mercedes-Benz 자동차 카테고리이며, BMW 자동차는 BMW 자동차 카테고리이며, 이 세 가지 카테고리는 주요 자동차 카테고리의 하위 카테고리입니다.
객체: 클래스의 특정 구현입니다. 예를 들어 BMW Q5는 BMW 자동차 클래스의 특정 구현입니다. 객체는 메모리에 저장됩니다. 메모리에서 객체 할당을 살펴보겠습니다.
객체 지향을 사용한다는 것은 위의 두 가지 지식 포인트를 유연하게 사용한다는 의미입니다. 클래스와 객체를 만들고 사용해보자
<?php /** *新建一个类 */ class newClass{ public $a; public $b; public function funA(){ echo "I am function A"; } public function funB(){ echo "I am function B"; } } /** *使用类创建对象 */ $opt=new newClass(); $opt->a="opt";//将opt对象中的a属性赋值为opt $opt->funA();//打印出"I am function A"?>
수정자: 클래스에서 클래스와 속성을 정의할 때 다음 세 가지 수정자를 사용할 수 있습니다. 추가하지 않으면 기본값은 public
public입니다. 가장 높은 권한
protected:권한 범위입니다. 자체 및 해당 하위 클래스 내에 있습니다
private:권한 범위는 자체 내에만 있습니다
생성자와 소멸자: 객체를 생성하기 위해 클래스를 인스턴스화할 때 객체를 초기화해야 하는 경우가 많습니다. 이때 클래스에 생성자 메서드를 정의해야 합니다. 객체 사용이 끝나면 객체를 해제하여 메모리 사용량을 줄여야 합니다. 이때 소멸자 메서드를 사용해야 합니다.
PHP에서는 다음 코드인 __construct() 메서드와 __destruct()를 사용합니다.
<?php class newClass{ public $a; public $b; public function __construct($a,$b){ $this->a=$a; $this->b=$b; echo "我是构造函数"; } public function __destruct(){ echo "我是析构函数"; } } ?>
Encapsulation
몇 가지 중요한 프로그램 모듈을 개발할 때 우리는 종종 다른 사람이 이러한 프로그램 모듈에 액세스하는 것을 원하지 않습니다. 쉽게 데이터를 얻을 수 있으므로 이러한 데이터는 캡슐화되어야 합니다. 이때 종종 private 키워드를 사용하여 이러한 속성과 메서드를 캡슐화합니다.
다음과 같습니다:
<?php class privateClass { private $a; private $b; private function privateFun() { echo "我是封装的方法"; } } ?>
이런 방식으로 객체를 생성할 때 전용 속성과 메서드를 호출할 수 없습니다. 하지만 매직 메서드를 사용하면 이러한 전용 속성과 메서드에 액세스할 수 있습니다.
__set() 및 __get() 사용
__set() 메서드를 통해 객체를 통해 멤버 속성 값을 직접 설정할 수 있음
__get() 메서드를 통해 멤버 속성 값을 직접 얻을 수 있음 객체를 통해
<?php class setClass { private $a; private $b="ww"; public function __set($oldValue,$newvalue){ $this->$oldValue=$newvalue; } public function __get($newvalue){ return $newvalue; } } $opt= new setClass(); $opt->a="sss";//直接设置私有属性值 echo $opt->b;//直接读取私有属性值 ?>
__isset() 및 __unset() 사용
__isset()을 통해 객체의 비공개 속성이 존재하는지 직접 확인
__unset()을 통해 객체의 비공개 속성을 직접 삭제
<?php class issetClass { private $a; private $b = 'www'; function __isset($privateName) { if (isset($privateName)) { return 1; } else { return 0; } } function __unset($privateName) { echo "销毁" . $privateName; } } $opt = new issetClass(); echo isset($opt->$b); var_dump(unset($opt->$b));?>
상속
여러 클래스를 작성할 때 때로는 여러 클래스가 동일한 속성과 메서드를 갖는 경우가 많습니다. 코드를 단순화하기 위해 하위 클래스가 상위 클래스의 일부 속성과 메서드를 상속할 수 있다는 개념을 도입합니다. , 중복된 코드 작성을 줄입니다.
상속 클래스를 작성하는 방법
하위 클래스를 작성하기 위해 확장 키워드를 사용합니다
<?php class parentClass{ } class childClass extends parentClass{ } ?>
위와 같이 childClass는 parentClass의 하위 클래스입니다. PHP는 단일 상속만 지원합니다. 즉, 하위 클래스에는 상위 클래스가 하나만 있지만 부모 클래스는 여러 종류의 자식을 가질 수 있습니다.
부모 클래스 메서드 다시 작성
부모 클래스의 메서드가 하위 클래스의 요구 사항을 충족할 수 없는 경우 부모 클래스 메서드를 재정의할 수 있습니다. 그러나 하위 클래스에서 상위 클래스의 메소드를 사용하려면 다음 구문을 사용할 수 있습니다: parent:: 메소드 이름 몇 가지 중요한 키워드
3.1 final
final은 클래스와 메소드를 수정할 수 있지만 멤버 속성은 수정할 수 없습니다. ;
final로 수정된 클래스는 상속될 수 없으며 final로 수정된 메서드는 하위 클래스에서 재정의될 수 없습니다.
3.2 static
static은 멤버 속성과 멤버 메서드를 수정할 수 있지만
static 및 메서드로 수정된 멤버는 수정할 수 없습니다. 다음 구문을 사용하여 클래스를 통해 직접 사용됩니다. 클래스 이름::$ 속성 이름 또는 메서드 이름();
클래스에서 사용할 경우 self:: $ 속성 이름 또는 메서드 이름
3.3 const
클래스에서 상수를 선언할 때는 정의() 대신 const를 사용하세요.
예: const TT=90. 상수를 사용할 때는 다음 구문을 직접 사용하세요. self::constant name
3.4 instanceof
이것을 사용하세요 인스턴스가 클래스의 인스턴스인지 여부를 감지하는 키워드입니다.
3.5 trait
php는 단일 상속만 수행할 수 있지만 코드를 재사용하고 단일 상속 문제를 해결하는 대체 방법도 제공합니다.
다음과 같습니다
<?php trait testA { function a() { } } trait testB { function b() { } } class testC { use testA, testB; function c() { } } ?>
추상 기술
추상 키워드로 수정된 메서드와 클래스를 추상 메서드 또는 추상 클래스라고 합니다.
추상 클래스 및 추상 메서드 선언
<?php abstract class testClass { $a; $b; abstract function testFun(); abstract function testFun1(); public function optFun() { echo "抽象类中的抽象方法"; }//抽象类可以有非抽象方法 } class childClass extends testClass { function testFun() { echo "子类中实现抽象方法"; } function testFun1() { echo "子类实现抽象方法"; } } abstract child1Class extends testClass { }//子类是抽象方法可以不实现父类的抽象方法?>
추상 기술은 하위 클래스 선언에 대한 사양을 제공하여 클래스 인스턴스화를 제한합니다(추상 클래스는 인스턴스화할 수 없음).
인터페이스 기술
인터페이스는 특별한 추상 클래스입니다. 인터페이스에서는 추상 클래스와 상수만 선언할 수 있습니다.
인터페이스를 선언하려면 인터페이스를 사용하고, 인터페이스를 구현하려면 구현만 사용할 수 있습니다. 기본 public;
one 하위 클래스는 여러 인터페이스를 상속하고 동시에 상위 클래스를 상속할 수 있습니다
<?php interface newInterface { const V = 12; abstract function fun1(); abstract function fun2(); } interface newInterface1 { abstract function fun3(); abstract function fun4(); } class parentClass { function fun5() { echo "fun5"; } } class optClass extends parentClass implements newInterface, newINterface1 { function fun1() { echo "fun1"; } function fun2() { echo "fun2"; } function fun3() { echo "fun3"; } function fun4() { echo "fun4"; } } ?>
다형성
PHP에서 다형성을 구현하려면 클래스가 여러 하위 클래스를 통해 상속되고 구현되어야 합니다. 클래스의 메서드가 여러 하위 클래스에서 재정의되고 다른 기능을 구현하는 경우 이를 다형성이라고 합니다.
추천 튜토리얼: "PHP 튜토리얼"
위 내용은 PHP 객체지향 간단한 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!