• php有关类和对象的相关知识1


    有关类和对象的相关知识

    类的自动加载

    类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类

    什么叫做“需要一个类”?通常是这样的情况:

    1,创建一个对象的时候(new

    2,直接使用一个类名(操作静态或静态方法)

    做法非常简单:

    做法1:使用__autoload魔术函数。

    即,“当程序需要一个类”的时候,就会去调用该函数:该函数我们需要自己去定义并在其中写好加载类文件的通用语句:

    做法2:使用spl_autoload_register函数

    该函数的作用是:用它“注册”(声明)多个可以用来代替__autoload函数作用的函数,语法如下:

    spl_autoload_regist(“函数名1”);

    spl_autoload_regist(“函数名2”);

    .........

    自然,其后也得去定义这些函数,并且这些函数的作用跟__autoload一样,不过此时就可以应对“更多的情形”——比如类文件分布在不同的目录中。

    对象的复制(克隆)clone

    浅克隆:

    只能克隆对象中的“非对象非资源”数据:

    但,如果对象中的属性存储的是“对象”类型,则就可以看到克隆不完全的情形,如下:

    结果显示为:

    可见,修改了o1中的b1数据,发现o2种的b1数据也跟着改变了——克隆不完全。

    我们可以使用“深克隆”来解决:

    深克隆:

    php中,默认克隆是浅克隆

    要想实现深克隆(一个对象的所有属性数据都彻底实现了“复制”),就需要对该对象类使用魔术方法:

    __clone(),并在里面来实现深度克隆——人为去复制浅克隆复制不了数据。

    则刚才的代码,改进如下:

    结果为:

    对象遍历

    对象也可以可以使用foreach语句进行遍历,有两点注意:

    1,只能遍历属性。

    2,只能遍历“看得到”的属性——代码所在范围可访问。

    在外面遍历:

    可见,此时protectedprivate属性都没有遍历出来。

    如果需要全部遍历,则改造为:

    一个思考题:如果只需要某对象中的部分数据?比如:只要a1,a2这个两个属性的数据?

    PHP内置标准类

    可见该类内部没有定义任何属性。

    但我们还是可以使用该类的属性——不存在的属性。

    将数据转换为对象

    转换基本语法:(目标类型)数据;

    对象转换为对象:没有变化;

    数组转换为对象:数组的键名当作属性名,值为对应值

    但通常,如果数数字下标,则其对应属性 并不方便操作(->)

    所以通常就适合于纯字符下标的数组。

    null转换为对象:空对象;

    结果为:

     其他标量数据转换为对象:属性名为固定的“scalar”,值为该变量的值

    类型约束:

    什么事类约束?

    其他很多语言中,类型约束是语法上的要求,即定义一个变量的时候,必须指定类型,并以后也只能存储该类型数据——这种是强类型语言的一个特点。比如:

    int  n1 = 1; //int类型变量

    float  f1 ; //float类型变量

    bool  function  getConcat( string  s1, string  s2){。。。。} //两个形参是string,返回值也是bool

    php是弱类型语言,其特点是无需为变量指定类型,而且在其后也可以存储任何类型。

    但:

    php的较新的语法中,在某些特定场合,针对某些特定类型,也可以进行语法约束。

    特定场合:函数(或方法)的形参变量

    特定类型:对象类型(类名), 接口类型(接口名), 数组类型(array), 函数类型(callable

    可以对函数(或方法)的参数设定必须使用的类型。只能对对象,接口,数组和函数进行约束,如下所示:

     function f1(类名 $p1){....}:要求该参数只能使用该类的对象;

     function f1(接口名 $p1){....}:要求该参数只能使用实现该接口的对象;

    function f1(array $p1){....}:要求该参数只能使用数组;

    function f1(callable $p1){....}:要求该参数只能是一个函数或方法,此时称之为回调函数(方法)

    同样的代码,对f1加上类型约束

    再来举个数组例子:

  • 相关阅读:
    Linux 基础命令3 shell
    Django 的学习(2) 从adminuser到配置
    Linux巨好用的
    常见任务&基本工具 1 软件包管理
    java学习补全 1
    基础命令1
    java 5 绘图GUI
    Open GL与OpenGLES
    NDK 安装步骤
    转:为什么要有handler机制?
  • 原文地址:https://www.cnblogs.com/ybygb-geng/p/9808923.html
Copyright © 2020-2023  润新知