PHP5类操作

2024-03-18 05:08
文章标签 操作 php5

本文主要是介绍PHP5类操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    类的结构: 类的内部能可能有三种东西,就是常量(constant),属性(property)和方法(method),功能可以理解成类外部的常量,变量和函数。

    [复制此代码]CODE:
    <?php
    class TEST
    {
    const NAME = 'value'; // 常量
    public $name = 'value'; // 属性
    public function name() // 方法
    {
    echo 'value';
    }
    }
    ?>

     

     

    在这之中,属性和方法又可以使用public, protected, private三个不同的关键字来将属性和方法的作用范围做进一步的区分,带有private关键字的属性和方法,只有所在的类中的方法才能调用;带有protected关键字的属性和方法,除了自己以外,自己的父类和子类中的方法也可以调用;带有public关键字的属性和方法,则可以从实例化以后的对象中进行调用,这样做最大的好处给所有的属性和方法增加了一些描述的特征,更便于整理和组织代码的结构。const关键字先跳过,和后面的static一起讲。
    static关键字是有别于public, protected, private的另一类型关键字(因此可以和public, protected, private叠加起来使用):

     

    [复制此代码]CODE:
    <?php
    class TEST
    {
    public static function name()
    {
    echo 'value';
    }
    }
    ?>

     

     

    带有static关键字的方法,可以在不对类进行实例化的情况下直接通过“::”符号调用,和public, protected, private的搭配,也可以让调用区分权限,但是一般都是和public搭档,前面提到的常量关键字const,应该就是public static类型的,因此只能通过self::NAME,TEST::NAME这样的形式调用常量,后面的__construct,__destruct等方法,都是属于static。
    类的结构部分,最后介绍的两个关键字是abstract和final,abstract关键字表示这个类必须被他的子类覆写,而final关键字表示这个类必须不能被他的子类覆写,这两个关键字的功能是正好相反的,带有abstract的方法被成为抽象方法,带有抽象方法的类,成为抽象类,这个在后面还有介绍。

     

     

     


     

     

    类的使用:
    类的使用主要有两种方法,一种是使用new关键字,另一种是使用“::”符号:
    PHP代码
    [复制此代码]CODE:
    <?php
    class TEST
    {
    public static function name()
    {
    echo 'value';
    }
    }

     


    //方法1:使用new关键字
    $test = new TEST;
    $test->name();

     


    //方法2:使用“::”符号
    TEST::name();
    ?>

    (1):使用new关键字成为实例化,上面的$test就是一个通过TEST类实例化而产生的对象,$test->name()称为调用$test对象的name方法。
    (2):使用new关键字使用类的时候,可以使用$this来指代类本身。
    (3):使用“::”符号的前提是方法必须是带有static关键字的,使用new关键字时,被调用的方法,必须带有public关键字(一个方法如果不带public, protected, private中的任何一个关键字,则默认为public)
    (4):同一个类可以通过new关键字被实例成多个不同的对象,但是彼此之间的是隔离的;“::”符号在使用的时候,方法在多次使用之间,是共享的:

    PHP代码
    [复制此代码]CODE:
    <?php
    class TEST1
    {
    public $name = 0;
    public function name()
    {
    $this->name = $this->name + 1;
    }
    }
    $test1 = new TEST1;
    $test2 = new TEST1;
    $test1->name(); //$name1 == 1
    $test2->name(); //$name1 == 1
    /*--------------------------------------------*/
    class TEST2
    {
    public static $name = 0;
    public static function name()
    {
    TEST2::$name = TEST2::$name + 1;
    }
    }
    TEST2::name(); // $name == 1
    TEST2::name(); // $name == 2
    ?>

     

     

     


     

    类的关系:
    类与类之间的关系,主要有抽象,接口和继承:
    PHP代码
    [复制此代码]CODE:
    <?php
    abstract class TEST1 // 抽象
    {
    abstract public function name1();
    public function name2()
    {
    }
    }
    class TEST2 extends TEST1 implements TEST3 // 继承
    {
    public function name1()
    {
    }
    }
    interface TEST3 // 接口
    {
    public function name2();
    }
    ?>

    (1)带有abstract关键字的类是抽象类,带有abstract关键字的方法是抽象方法,抽象类中的抽象方法,必须在子类中被覆写。
    (2)带有interface关键字的类,就是接口,接口不允许实现任何的方法,接口中所有的方法,都必须在子类中被覆写。
    (3)带有 classA extends classB 或者 classA implements classB 字样的就是继承,extends表示继承另一个类,implements表示继承另一个接口,一次只能extends一个类,但是可以implements多个接口。
    (4)抽象类,接口,以及最终继承并实现的方法,都必须是public的。
    在继承的过程中,子类会覆写父类的同名方法,这个时候如果需要在子类中调用父类的方法,可以使用parent关键字或者类名加上“::”符号调用:
    PHP代码
    [复制此代码]CODE:
    <?php
    class TEST1 extends TEST2
    {
    public function name()
    {
    echo parent::name2();
    echo TEST2::name2();
    }
    }
    class TEST2
    {
    public function name2()
    {
    echo 'value2';
    }
    }
    $test = new TEST1;
    $test->name();
    ?>

     

     

    这里再解释一下“::”方法在类中的作用,一个作用是在没有实例化的情况下调用常量(其实也理解成static就可以了),static属性和方法,再一个是在类的内部,通过self,parent和类名建立便捷的调用通道。
    对象于对象之间的关系,主要是“==”等于,“===”全等于,不等于和clone:
    PHP代码
    <?php
    class TEST
    {
    public function name()
    {
    }
    }
    $test1 = new TEST;
    $test2 = new TEST;
    $test3 = $test1;
    echo $test1 == $test2 ? true : false; // true
    echo $test1 == $test3 ? true : false; // true
    echo $test2 == $test3 ? true : false; // true
    echo $test1 === $test2 ? true : false; // false
    echo $test1 === $test3 ? true : false; // true
    echo $test2 === $test3 ? true : false; // false
    ?>
    (1)两个类只要拥有相同的属性和方法,就是“==”等于。
    (2)两个类必须是指向的同一个对象,才能是“===”全等于。
    clone比较特殊,在上面的例子中,$test3 = $test1的过程并不是给了 $test3 一份 $test1 对象的拷贝,而是让 $test3 指向了 $test1,如果一定要获得一份$test1的拷贝,就必须使用clone关键字:
    PHP代码
    [复制此代码]CODE:
    <?php
    $test3 = clone $test1;
    ?>

     

     

     

     

    类的钩子:
    __autoload:
    是一个函数名,也是唯一一个在类的外部使用的钩子,在实例化一个对象的时候,如果没有预先载入类,就会调用这个钩子。
    __construct
    在类被实例话的时候,被调用的钩子,可以做一些初始化的操作。
    __destruct
    在类被销毁的时候,被调用的钩子。
    __call
    当对象试图调用一个不存在的方法的时候,被调用的钩子
    __sleep
    当使用serialize()函数对一个类进行序列话操作的时候,会调用这个钩子
    __wakeup
    当使用unserialize()函数对一个类进行反序列话操作的时候,会调用这个钩子
    __toString
    当一个对象将被转变为字符串的时候,会调用这个钩子(比如echo的时候)
    __set_state
    当调用var_export()函数操作一个类的时候,会调用这个钩子
    __clone
    当使用clone关键字对一个类进行拷贝操作的时候,会调用这个钩子
    __get
    在获取一个类中的属性值的时候,会调用这个钩子
    __set
    在设置一个类中的属性值的时候,会调用这个钩子
    __isset
    在使用isset()函数对类中的属性值进行判定的时候,会调用这个钩子
    __unset
    在使用unset()函数销毁一个属性值的时候,会调用这个钩子
    类的小技巧:
    在实例话一个类的时候,可以使用这样的形式给__construct钩子传递参数:
    PHP代码
    [复制此代码]CODE:
    <?php
    class TEST
    {
    public function __construct($para)
    {
    echo $para;
    }
    }
    $test = new TEST('value'); // 显示 value
    ?>

     

     

    foreach()函数可以用来对类或者对象中的属性进行遍历,遍历的时候会先判断public, protected, private的情况而显示:
    PHP代码
    [复制此代码]CODE:
    <?php
    class TEST
    {
    public $property1 = 'value1';
    public $property2 = 'value2';
    public $property3 = 'value3';
    public function name()
    {
    foreach($this as $key => $value)
    {
    print "$key => $value/n";
    }
    }
    }
    $test = new TEST;
    foreach($test as $key => $value)
    {
    print "$key => $value/n";
    }
    $test->name();
    ?>

     

     

     

     

    在给类中的方法传递参数的时候,可以对参数进行强制的判定,这里只支持对数组和对象的判定:
    PHP代码
    [复制此代码]CODE:
    <?php
    class TEST1
    {
    public function name( TEST2 $para )
    {
    }
    }
    class TEST2
    {
    }
    $test2 = new TEST2;
    $test1 = new TEST1;
    $test1->name('value'); // 会报错,因为这个参数必须是TEST2实例化以后的对象
    $test1->name($test1); // 不会报错
    ?>

     

     

     

    兼容php4的语法:
    php5的类是往下兼容php4的,这些php4时代的语法也得到了继承,但是并不建议在php5的环境中使用。
    (1)使用var预设属性,会自动转换成public。
    (2)使用类名作为构造函数,在没有__construct构造方法的情况下,会寻找和类名相同的函数作为构造函数。

    这篇关于PHP5类操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/821263

    相关文章

    Python使用python-pptx自动化操作和生成PPT

    《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

    MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

    《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

    MySQL 临时表与复制表操作全流程案例

    《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

    MySQL 数据库表与查询操作实战案例

    《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

    Java Stream流以及常用方法操作实例

    《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

    MySQL数据类型与表操作全指南( 从基础到高级实践)

    《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

    python panda库从基础到高级操作分析

    《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

    Python操作PDF文档的主流库使用指南

    《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

    Python对接支付宝支付之使用AliPay实现的详细操作指南

    《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

    MySQL 强制使用特定索引的操作

    《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND