>  기사  >  백엔드 개발  >  PHP 객체지향 간단한 요약

PHP 객체지향 간단한 요약

WJ
WJ앞으로
2020-05-29 10:55:062420검색

기본 지식

클래스: 동일한 속성이나 메서드를 가진 클래스의 모음입니다. 예를 들어, Chevrolet 자동차는 Chevrolet 자동차 카테고리이고, Mercedes-Benz 자동차는 Mercedes-Benz 자동차 카테고리이며, BMW 자동차는 BMW 자동차 카테고리이며, 이 세 가지 카테고리는 주요 자동차 카테고리의 하위 카테고리입니다.
객체: 클래스의 특정 구현입니다. 예를 들어 BMW Q5는 BMW 자동차 클래스의 특정 구현입니다. 객체는 메모리에 저장됩니다. 메모리에서 객체 할당을 살펴보겠습니다.

PHP 객체지향 간단한 요약

객체 지향을 사용한다는 것은 위의 두 가지 지식 포인트를 유연하게 사용한다는 의미입니다. 클래스와 객체를 만들고 사용해보자

<?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 = &#39;www&#39;;
    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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제