PHP 객체의 기본 사항 요약

WBOY
풀어 주다: 2023-04-10 22:18:01
앞으로
5476명이 탐색했습니다.

이 기사는 객체지향 관련 문제를 주로 소개하는 PHP에 대한 관련 지식을 제공합니다. 객체지향 프로그래밍의 본질은 데이터와 함수, 즉 객체의 작동 주체를 늘리는 데 있습니다. 모두에게.

PHP 객체의 기본 사항 요약

추천 학습: "PHP 튜토리얼"

php, thinkphp, Redis, vue, uni-app 및 기타 기술에 대한 실습 학습, shop과 같은 오픈 소스 전자 상거래 시스템 추천, 아이디어에서 배울 수 있음, 저작권에 가시면 무료로 상업적으로 사용하실 수 있습니다. gitee 다운로드 주소:
프로젝트 주소를 입력하려면 클릭하세요

객체 지향: OOP(객체 지향 프로그래밍) 프로그래밍

프로시저 지향은 프로그래밍 아이디어입니다

객체의 본질- 지향 프로그래밍은 데이터와 함수의 동작체를 늘리는 것, 즉 객체지향

객체에 있는 모든 데이터와 함수는 대부분 주체(객체)에 의해 호출되고 동작한다

객체지향의 기본

차이점 프로세스 지향과 객체 지향 사이

PHP 객체의 기본 사항 요약

객체 지향 키워드

  • 클래스: 클래스, 정의 지향 객체 몸체의 가장 바깥쪽 구조, 몸체의 데이터와 함수(함수)를 감싸는 데 사용됨
  • Object : 객체, 특정 유형의 트랜잭션을 나타내는 특정 표현으로 인스턴스라고도 합니다.
  • 인스턴스화: 새로운, 객체를 생성하는 클래스의 프로세스
  • 클래스 멤버: 멤버
    • 메소드: 메소드, 본질적으로 다음에서 생성된 함수입니다. 멤버 메서드 또는 멤버 함수라고 하는 클래스 구조
    • 속성: 본질적으로 멤버라고 하는 클래스 구조에서 생성된 변수인 속성
    • 클래스 상수: const, 본질적으로 클래스 구조에서 생성된 상수

객체 생성

<?phpclass  People{}$man=new People();# 实例化类,man就是对象var_dump($man);?>
    # 输出object(People)#1 (0) { }
    #1表示:对象编号,与类无关,是整个脚本中对象的序号(0)表示:成员变量(属性)个数{}表示:具体成员变量信息(键值对)
로그인 후 복사

클래스 객체

<?phpclass  Buyer{
    # 常量声明
    const BIG_NAME=&#39;BUYER&#39;;
    # 常量不需要加 $

    # 属性声明
    # $name;
    # 错误的,类内部属性必须使用访问修饰限定符
    public $name;
    public $money=0;
    
    # 方法声明
    function display(){
        echo __CLASS__;
        # 魔术常量,输出类名
        # 方法内部变量属于局部变量
    }}# 实例化$a = new Buyer();# 属性操作,增删改查echo $a->money;$a->money='20';$a->sex='male';unset($a->name);echo '<br>';# 方法操作$a->display();echo '<br>';var_dump($a);?>
    # 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }
로그인 후 복사

참고: 클래스 상수는 객체에 의해 액세스되지 않습니다

액세스 수정 한정자

속성 또는 메서드 이전의 수정된 키워드는 속성 또는 메서드의 액세스 위치를 제어하는 ​​데 사용됩니다

  • public: 공개, 클래스 내부 및 외부에서 액세스 가능
  • protected: 보호됨, 해당 클래스 내에서만 액세스 허용
  • private: 프라이빗, 정의된 클래스 내에서만 액세스 가능

속성은 액세스 권한이 있어야 합니다. 수정자 한정자, 메소드는 액세스 수정자 한정자를 가질 수 없습니다. 기본값은 public입니다

클래스의 내부 객체

$this, 메소드에 내장된 객체는 호출되는 메소드의 객체를 자동으로 가리킵니다

$this 메소드 내부에 존재하므로(내부 사용 전용) 클래스 구조 내에 있는 것과 동일합니다

  • 액세스 수정자 한정자에 의해 수정된 모든 멤버에 액세스할 수 있습니다.
  • 개인 멤버 액세스는 공용 메서드를 통해 이루어집니다(공용 메서드는 클래스 외부에서 접근 가능)
<?phpclass  Article{
    protected $name = &#39;a&#39;;
    private $type = &#39;art&#39;;

    public function get_name()
    {
        var_dump($this);
    }}$a = new Article();var_dump($a);?>
    # 输出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }
로그인 후 복사

$this는 객체를 나타내며, $this가 위치한 환경은 클래스 내부의 메소드 내부에 있으므로, $this 객체는 클래스 내부에서 접근하게 됩니다. 액세스 수정 한정자에 의해 제한되지 않습니다

PHP 객체의 기본 사항 요약

PHP 객체의 기본 사항 요약

PHP 객체의 기본 사항 요약

Construction method

  • __construct()는 객체에 특성이 있는 시스템 내장 매직 메소드입니다. 인스턴스화 후 객체는 자동으로

  • 를 호출합니다.
  • 생성자의 목적은 객체 속성 및 기타 리소스를 포함한 리소스를 초기화하는 것입니다.

  • 생성자가 정의되고 생성자가 자체 매개변수와 함께 제공되면 새 클래스 이름(매개변수 목록) 메서드만 사용할 수 있습니다. 올바르게 인스턴스화되세요

  • 마법 메소드는 객체를 직접 호출하여 호출할 수도 있지만 실제로는 쓸모가 없습니다

<?phpclass  Article{
    public $name=&#39;xiaoli&#39;;
    private $sex="male";

    public function __construct($name,$sex)
    {
        $this->name = $name;
        $this->sex = $sex;
    }}$a = new Article('xiaowang', 'famale');var_dump($a);?>
로그인 후 복사

Destructor 메소드

  • __destruct(), 객체가 파괴될 때 자동으로 호출되어 해제됩니다. resources
  • 객체 파괴
    1. 객체에 변수 포인터가 없습니다(변수는 다른 데이터를 가리킴)
    2. 객체는 능동적으로 파괴됩니다(설정 해제하면 객체 변수가 파괴됩니다)
    3. 스크립트 실행 종료(리소스 자동 해제)
  • PHP 스크립트가 실행되면 모든 리소스가 해제되므로 소멸자 메서드는 일반적으로 덜 사용됩니다
<?phpclass  Article{
    protected $name = &#39;xiaoli&#39;;
    private $sex = &#39;famale&#39;;

    public function __destruct()
    {
        // TODO: Implement __destruct() method.
        echo __FUNCTION__;
    }}$a=new Article();# 销毁对象$a=1;unset($a);# __destructendecho &#39;end&#39;;?>
    # 不销毁对象,php在运行结束也会释放资源# end__destruct
로그인 후 복사

값으로 전달되는 개체

정의: 개체를 보유하는 변수를 다른 변수에 할당

PHP에서는 object is by reference : 즉, 하나의 객체 변수가 다른 변수에 할당되고, 두 변수가 동일한 객체 주소를 가리키는 즉, 객체는 하나만 존재합니다

<?phpclass  Article{
    public $name = &#39;xiaoli&#39;;
    public $sex = &#39;famale&#39;;}$a=new Article();$b=$a;var_dump($a,$b);echo &#39;<br>';$a->name="wangxiaohu";var_dump($a,$b);echo '<br>';?>
    # 输出object(Article)#1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" } object(Article)
    #1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" }object(Article)
    #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" } object(Article)
    #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" }
로그인 후 복사

범위 결정 연산자(클래스 상수 액세스)

있습니다. 두 개의 콜론은 "::"을 형성하는데 특별히 사용됩니다. 클래스가 클래스 멤버 연산을 구현하는 경우 클래스는 클래스 멤버에 직접 액세스할 수 있습니다

  • 범위 결정 연산자는 클래스(클래스 이름)의 클래스 멤버에 액세스하는 데 사용됩니다

    类名::类成员
    로그인 후 복사
  • 범위 분해 연산자도 사용할 수 있습니다. 객체를 클래스로 사용합니다(권장하지 않음)

    $对象名::类成员
    로그인 후 복사
  • 클래스 상수는 클래스에서만 액세스할 수 있습니다.

<?phpclass  Article{
    const  NAME=&#39;ocean&#39;;}echo Article::NAME;
    # 常量是不能通过 Article->NAME 来进行访问的$a=new Article();echo $a::NAME;
    # 范围解析操作符兼容对象,找到对象所属类最终进行访问,效率降低,灵活性提高?>
로그인 후 복사

클래스 상수는 고정되어 있지만 객체의 속성은 개체마다 다릅니다

PHP 객체의 기본 사항 요약

静态成员

定义:使用 static 关键字修饰的类成员,表示该成员属于类访问

  • 静态成员
    • 静态属性
    • 静态方法
  • 静态成员是明确用来给类访问的,而不是对象
  • 静态成员只是多了一个 static 关键字修饰,本身也可以被对象访问
  • 静态成员同样可以使用不同的访问修饰限定符限定,效果一致

PHP 객체의 기본 사항 요약

<?phpclass  Article{
    public static $name = &#39;hlm&#39;;
    public static $type = &#39;art&#39;;

    public static function getName()
    {
        return self::$name;
    }}# 静态属性$a = new Article();echo Article::$name;# 静态方法echo Article::getName();?>
로그인 후 복사

self关键字

  • 在类的内部(方法里面)使用,代替类名的写法
  • self 如同 $this 代表内部对象一样,能够在方法内部代替当前类名
  • 能够保障用户方便修改类名字
  • self 关键字是代替类名,所以需要配合范围解析操作符 ::
<?phpclass  Article{
    public static function getInstance1()
    {
        return new self();
    }

    public static function getInstance2()
    {
        return new Article();
    }}$a = Article::getInstance1();$b = Article::getInstance2();var_dump($a,$b);?>
    # 输出object(Article)
    #1 (0) { } object(Article)
    #2 (0) { }
로그인 후 복사

类加载

类的访问必须保证类在内存中已经存在,所以需要再用类之前将类所在的 PHP 文件加载到内存中

  • 类的加载分为两种

    • 手动加载:在需要使用类之间通过 include 将包含类的文件引入到内存
    • 自动加载:提前定义好类结构和位置,写好引入类文件代码,在系统需要类而内存不存在的时候想办法让写好的加载类的代码执行(自动加载是自动运行写好的加载类的代码)
  • 自动加载两种方式

    • 魔术函数 __autoload:系统自动调用,需要传入类名,在函数内部实现类的手动加载(PHP7及之后不建议使用此方法)
    function __autoload($classname){
        # 找到对应的文件路径和命名规范,手动加载}
    로그인 후 복사
     
    • 自定义函数:自己定义类的加载实现,然后通过 spl_autoload_register 注册到自动加载机制(可注册多个自动加载)
    # 自定义类加载函数function 自定义函数($classname){
        # 找到对应的文件和命名规范,手动加载}#注册自动加载sql_autoload_register('自定义函数名字')
    로그인 후 복사

自动加载要求在声明类的时候有良好的规范

  • 类名与文件名一致:类名.php 或者 类名.class.php
  • 类文件分类放好

PHP 객체의 기본 사항 요약

例:手动加载

PHP 객체의 기본 사항 요약

Article.php

<?phpclass  Article{
    public function getName(){
        return __METHOD__;
    }}
로그인 후 복사

mian.php

<?php # include &#39;Article.php&#39;;# 直接加载比较消耗资源,而且如果类已经在内存中存在,直接include会报错,建议判断后再加载if(!class_exists(&#39;Article&#39;)){
    include &#39;Article.php&#39;;}$a=new Article();var_dump($a->getName());
    # outputstring(16) "Article::getName"
로그인 후 복사

自动加载

  • __autoload(不建议使用)

一个系统中,可能类文件会放到不同的路径下,因此一个完整的自动加载函数,应该要进行文件判定功能

<?php function __autoload($classname){
    # 形参代指 类名
    #组织文件路径,假设当前路径下,有两个文件夹下都有类c和类m
    $c_file = &#39;c/&#39; . $classname . &#39;.php&#39;;
    if (file_exists($c_file)) {
        include_once($c_file);
        return true;
    } 
    //if 语句如果只有一行不需要加 {}
    //include_once 只加载一次

    $m_file = &#39;m/&#39; . $classname . &#39;.php&#39;;
    if (file_exists($m_file)) {
        include_once($m_file);
        return true;
    }
}


$a=new Article();
$b=new Article();
로그인 후 복사
  • spl_autoload_register
<?phpfunction  autoload01($classname){
    if(!class_exists($classname)){
        $file_name=$classname.&#39;.php&#39;;
        if(file_exists($file_name)) include_once $file_name;
    }}spl_autoload_register(&#39;autoload01&#39;);$a=new Article();
로그인 후 복사

对象克隆

通过已有的对象复制一个新的同样的对象,但两者之间并非同一个对象

PHP 객체의 기본 사항 요약

PHP 객체의 기본 사항 요약

面向对象高级

面向对象三大特性

封装、继承、多态

类的封装

PHP 객체의 기본 사항 요약

类的继承

inherit,子类合法拥有父类的某些权限

  • 继承必须满足继承关系:即存在合理的包含关系
  • 继承的本质是子类通过继承可以直接使用父类已经存在的数据和数据操作
  • PHP 使用 extends 关键字表示继承

子类也称派生类

父类也称基类

# 父类class Human{}# 子类继承class Man extends Human{}
로그인 후 복사

类的多态

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果

  • 需要发生类的继承,同时出现方法的重写(override),即子类拥有与父类同名的方法
  • 在实例化对象的时候让父类对象指向子类对象(强制类型,PHP不支持,PHP 弱类型很灵活)
  • 结果:父类对象表现的子类对象的特点

PHP 객체의 기본 사항 요약

—PHP继承—

<?phpclass  Human{
    public function show(){
        echo __METHOD__;
    }}class Man extends Human{}$m=new Man;$m->show();
로그인 후 복사

有限继承

子类在继承父类的成员时,并非继承所有内容,而是继承并使用父类部分内容

  • PHP 상속의 본질은 객체 상속입니다.
  • PHP의 상속 콘텐츠: 모든 공개 멤버, 보호 멤버 및 상위 클래스의 비공개 속성, 비공개 메소드는 상속될 수 없습니다.
  • 보호 멤버는 상속 전용이며 다음에서 사용할 수 있습니다. 상위 클래스 클래스 또는 하위 클래스에 대한 내부 액세스
  • Private 멤버는 자신이 속한 클래스에서 공개 또는 보호 메서드를 설정해야만 액세스할 수 있습니다.
  • 생성자 및 소멸자 메서드는 하위 클래스에서 상속할 수 있습니다.

override Override

override , 상위 클래스와 동일한 이름을 가진 멤버가 하위 클래스에 정의됨

PHP 객체의 기본 사항 요약

부모 키워드

상위 클래스의 멤버에 명시적으로 액세스하는 표현식

PHP 객체의 기본 사항 요약

메서드가 다시 작성된 후 액세스 호출 하위 클래스 메서드입니다. 상위 클래스 메서드에 액세스하려면 하위 클래스 메서드에서 parent를 사용하여 상위 클래스 메서드에 강제로 액세스할 수 있습니다.

부모는 상위 클래스의 속성에 액세스하는 데 사용할 수 없습니다(정적 속성은 )

PHP 상속 기능

  • PHP만 단일 상속이 가능하며 상위 클래스는 하나만 있습니다. (여러 클래스를 상속하는 경우 체인 상속을 사용할 수 있습니다.)
  • PHP 상속에서는 private 메소드만 상속할 수 없습니다.
  • PHP 상위 클래스에서 생성자와 소멸자의 상속을 허용합니다.

정적 지연 바인딩

PHP 객체의 기본 사항 요약

PHP 객체의 기본 사항 요약

Final 클래스 Final

final 키워드를 사용하여 클래스 이름을 수정하면 이 클래스를 상속할 수 없음을 나타냅니다.

final 키워드 메소드를 수정할 수도 있습니다. 이는 메소드를 재정의할 수 없음을 나타냅니다. (보통 이때 클래스는 final 키워드를 사용하지 않습니다.)

PHP 객체의 기본 사항 요약

Abstract 클래스 Abstract

Abstract 클래스 Abstract

클래스가 클래스임을 나타내는 abstract 키워드로 수정된 클래스입니다. 상속만 가능하고 인스턴스화할 수 없습니다

추상 키워드는 메서드를 수정할 수 있습니다. 이는 메서드가 추상 메서드이고 추상 메서드에 메서드 본문이 없음({} 없음)을 나타냅니다.

추상 메서드가 존재하는 클래스는 다음과 같아야 합니다. 추상 클래스

추상 클래스를 상속받는 클래스는 추상 클래스이거나 추상 클래스에 모든 추상 메소드를 구현해야 합니다

특성 코드 재사용PHP 객체의 기본 사항 요약

은 서로 다른 클래스 간에 공통 코드가 있는 경우에 적용 가능합니다. 그러나 클래스 간에는 상속 관계가 없습니다. 이 경우 공통 코드는 특성에 저장될 수 있습니다. 특성에는 속성(정적 포함), 멤버 메서드(정적 및 추상 포함)가 포함될 수 있습니다. 메소드), 그러나 클래스 상수는 없습니다.

특성은 코드 재사용에 사용되며 인스턴스화할 수 없으며 상속될 수 없습니다.

동일한 이름을 가진 특성

클래스에 도입되어야 할 수 있습니다. 여러 특성 및 동일한 이름이 다음에 나타날 수 있습니다. 다른 특성

PHP 객체의 기본 사항 요약

Interface

Interface는 일부 공통 클래스가 구현해야 하는 메서드를 표준화하는 데 특별히 사용됩니다.

  • 인터페이스는 클래스는 아니지만 클래스와 구조가 유사합니다.
  • 인터페이스는 인스턴스화할 수 없으며 클래스는 구현할 수 있습니다. 인터페이스

인터페이스 인터페이스 이름{}

클래스 클래스 이름은 인터페이스 이름을 구현합니다.{}

PHP 객체의 기본 사항 요약

인터페이스 멤버

인터페이스 멤버는 두 가지 유형만 가질 수 있습니다.

  • 인터페이스 상수: const
  • 공통 인터페이스 메서드 (일반 메소드와 정적 메소드)

PHP 객체의 기본 사항 요약

PHP 오버로드

오버로드는 동일한 이름을 가진 여러 메소드가 클래스에 나타날 수 있으며 매개변수의 개수와 유형이 서로 다르다는 것을 의미합니다

PHP 객체의 기본 사항 요약

사용됨 내결함성을 위해

속성 오버로딩

객체가 존재하지 않거나 불충분한 권한에 액세스할 때 코드가 잘못되지 않도록 자동으로 매직 메소드가 실행됩니다.

속성 오버로딩 매직 메소드

  • __get(속성 이름) : 존재하지 않거나 권한이 부족한 속성에 접근할 때 트리거
  • __set(속성 이름, 속성 값): 존재하지 않거나 권한이 부족한 속성에 접근할 때 트리거
  • __isset(속성 이름): 한다고 판단 존재하지 않거나 권한이 충분하지 않습니다. 속성이 트리거됩니다
  • __unset(속성 이름): 존재하지 않거나 권한이 부족한 속성을 삭제할 때 트리거됩니다.
  • __tostring(): 문자열로 처리

메서드 오버로드

객체 또는 클래스 액세스가 존재하지 않거나 권한이 충분하지 않습니다. 자동으로 트리거되는 매직 메소드인 메소드는 코드를 오류 없이 만듭니다

  • __cal(方法名,方法参数列表):调用不存在或者权限不够的方法时触发
  • __callStatic(方法名,方法参数列表):调用不存在或者权限不够的静态方法时触发

对象遍历

将对象中的所有属性以键值对的形式取出并进行访问

  • 对象是一种复合数据类型,对象中真正保存的内容是属性

  • 对象的属性本质也是一种键值对关系:名字 = 值

  • 对象遍历就是利用 foreach 对对象中的属性进行取出解析

  • 对象遍历遵循访问修饰限定符的限定:即类外只能遍历所有共有属性

    foreach(对象变量 as [属性名变量 =>] 属性值变量){
        #属性名变量代表取出的每个属性的名字
        #属性值变量代表取出的每个属性的值}
    로그인 후 복사

    PHP 객체의 기본 사항 요약

Iterator 迭代器

PHP 객체의 기본 사항 요약

生成器

PHP 객체의 기본 사항 요약

PHP 객체의 기본 사항 요약

yield 关键字

设计模式

design pattern,是软件开发人员在软件开发过程中问题的解决方法

单例模式

singleton,是一种类的设计只会最多产生一个对象的设计思想PHP 객체의 기본 사항 요약

保证资源唯一性

工厂模式

。。。。。。

命名空间

namespace,指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目能出现重名结构问题

PHP 객체의 기본 사항 요약

基础语法:

namespace 关键字定义空间

命名规则

字母、数字、下划线,不能以数字开头

命名空间必须写在所有代码之前,定义了一个,之后可以定义多个

PHP 객체의 기본 사항 요약

子空间

subspace,即在已有空间之上,再在内部进行空间划分

子空间直接通过 namespace+路径符号 \ 实现

非限定名称

直接访问元素本身,代表当前所属空间(当前目录)

限定名称

使用空间名+原名,代表访问当前空间子空间(当前目录子目录)

完全限定名称

从根目录(全局空间)开始访问,使用 \ 作为全局空间开始符号(根目录)

全局空间元素访问:使用完全限定名称访问

PHP 객체의 기본 사항 요약

命名空间引入

PHP 객체의 기본 사항 요약

推荐学习:《PHP视频教程

위 내용은 PHP 객체의 기본 사항 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿