>백엔드 개발 >PHP 튜토리얼 >객체지향 PHP의 특징은 무엇인가요? PHP의 객체지향 기능 소개(코드)

객체지향 PHP의 특징은 무엇인가요? PHP의 객체지향 기능 소개(코드)

不言
不言원래의
2018-07-24 16:19:012791검색

여기서 언급하는 PHP 객체지향은 정확하게 말하면 PHP 객체지향 프로그래밍이라고 불러야 합니다. PHP 객체지향 프로그래밍의 세 가지 기본 기능은 캡슐화, 상속 및 다형성입니다. 지향적인 프로그래밍 기능.

1. PHP 객체지향의 세 가지 주요 기능:
1. 캡슐화:
캡슐화는 데이터에 대한 추상화된 데이터와 작업을 캡슐화하는 것이며, 프로그램의 다른 부분은 승인된 프로그램을 통해서만 작동할 수 있습니다. (멤버 메서드)는 데이터에 대해 작업을 수행할 수 있습니다.

액세스 제어 문자 할당 값.png

2. 상속:
소위 상속이란 하위 클래스가 상위 클래스의 일부 (공개/보호) 속성과 (공개/보호) 메서드를 상속한다는 의미입니다. 내려오세요. 비공개는 상속될 수 없습니다.

  作用:增加代码复用性,管理代码成本低。
 
  基本语法:
  class 类名 extends 父类名 {
        //需要的非私有属性和方法
  }

Inheritance.png

<?php
    
    //父类
    Class Student {
        public $name;
        protected $age;
        protected $grade;

        // public __construct() {

        // }

        public function showInfo() {
            echo $this -> name."<br/>".$this -> age;
        }
    }

    /**
    * 小学生
    */
    class Pupil extends Student
    {
        public function test() {
            echo "<br/>小学生在考试。。。";
        }
    }

    /**
    * 大学生
    */
    class Graduate extends Student
    {
        public function test() {
            echo "<br/>大学生在考试。。。";
        } 
    }

    $stu1 = new Pupil();
    $stu1 -> name = "lizzy";
    $stu1 -> test();
    $stu1 -> showInfo();

    $stu2 = new Graduate();
    $stu2 -> name = "zxm";
    $stu2 -> test();
    $stu2 -> showInfo();
?>

참고:
(1) 보호된 속성과 메서드는 보호되며 하위 클래스에서 직접 호출할 수 없습니다. 메서드 액세스는 하위 클래스에서 정의되어야 합니다.

Class ParentClass {
    public $name = &#39;lizzy&#39;;
    protected $age = 24;
    private $sex = "女";

    public function test1() {
        echo "<br/>展示public方法";
    }

    protected function test2() {
        echo "<br/>展示protected方法";
    }

    private function test3() {
        echo "<br/>展示private方法";
    }
}

Class SubClass extends ParentClass {
    function show() {
        echo "age=".$this->age;
        // echo "sex=".$this->sex;//是不能继承下来的
        $this -> test2();
    }
}

$sub1 = new SubClass();
$sub1 -> show();
$sub1 -> test1();

(2) 하위 클래스가 상위 클래스의 생성자 또는 다른 메서드(공개/보호)를 호출하도록 하려면 클래스 이름::메서드 이름 또는 부모::메서드 이름;

Class A {
    public $n1=90;

    public function __construct() {
        echo "A的构造方法";
    }
}

Class B extends A {
    function __construct() {
        echo "B的构造方法";
        //调用父类的两种方法
        // A::__construct();
        parent::__construct();
    }
}
$b = new B();

( 3) 하위 클래스의 메소드가 상위 클래스의 메소드(보호/공개)와 완전히 일치하는 경우 이를 메소드 덮어쓰기(overwriting)라고 합니다.

3. 다형성:
"오버로딩"은 클래스 다형성의 표현입니다.
오버로딩의 개념: 함수 이름은 동일하지만 매개변수의 개수나 함수의 매개변수 유형이 다르기 때문에 동일한 함수 이름이 됩니다. 그러나 다른 기능을 구별할 수 있습니다.

Magic 함수는 __call이지만 사용은 권장되지 않습니다. 객체가 메서드를 호출하고 해당 메서드가 존재하지 않으면 시스템이 자동으로 __call을 호출합니다.

<?php

    Class A {

        public function test1($p) {
            echo "接收一个参数<br/>";
        }

        public function test2($p) {
            echo "接收两个参数<br/>";
        }

        //提供__call 它一个对象调用某个方法,而该方法不存在,则系统会自动调用__call
        function __call($method,$p) {
            if ($method == "test") {
                if (count($p) == 1) {
                    $this -> test1($p);
                } elseif (count($p) == 2) {
                    $this -> test2($p);
                }
            }
        }
    }

    $a = new A();
    $a -> test(1);
    $a -> test(21,43)
?>

일반적인 마법 상수: 두 개의 밑줄 LINE 두 개의 밑줄;
두 개의 밑줄 FILE 두 개의 밑줄;

메소드 재정의/재정의:
1. 모든 하위 클래스에는 메서드가 있지만 상위 클래스는 메서드 작성 방법을 모르기 때문에 하위 클래스가 이 메서드를 재정의하도록 할 수 있습니다.
다음과 같이 사용하세요.

<?php

    Class Animal {
        function cry() {
            echo "不知道怎么叫";
        }
    }

    //重写
    Class Dog extends Animal {
        function cry() {
            echo "小狗汪汪叫";
        }
    }

    //重写
    Class Pig extends Animal {
        function cry() {
            echo "小猪哼哼叫";
        }
    }

    $dog = new Dog();
    $dog -> cry();
    $pig = new Pig();
    $pig -> cry();

?>

메서드 재작성 세부정보:
1. 재작성된 하위 클래스의 함수 이름과 매개변수 개수는 상위 클래스의 이름과 일치해야 하지만 매개변수 이름은 동일할 필요는 없습니다. .
2. 하위 클래스가 상위 클래스(공개/보호)의 메소드를 호출하려는 경우 parent::method name(); 또는 상위 클래스 name::method name();을 사용할 수 있습니다. 상황.
3. 메서드 재정의를 구현할 때 액세스 한정자는 다를 수 있지만 하위 클래스의 액세스 범위 >= 상위 클래스의 액세스 범위를 충족해야 합니다.

다형성은 다음에 반영됩니다.
하위 클래스가 상위 클래스의 메서드를 재정의하지 않는 경우 하위 클래스는 상위 클래스를 호출합니다. 하위 클래스가 상위 클래스의 메서드를 재정의하면 자체 메서드를 호출합니다.

관련 추천:

PHP 제로 기반 입문 튜토리얼

PHP의 객체 지향에 대한 나의 이해에 대해 이야기해 보세요

위 내용은 객체지향 PHP의 특징은 무엇인가요? PHP의 객체지향 기능 소개(코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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