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,只能遍历“看得到”的属性——代码所在范围可访问。
在外面遍历:

可见,此时protected和private属性都没有遍历出来。
如果需要全部遍历,则改造为:

一个思考题:如果只需要某对象中的部分数据?比如:只要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加上类型约束

再来举个数组例子:

php有关类和对象的相关知识1的更多相关文章
- php有关类和对象的相关知识2
与类有关的魔术常量: __CLASS__,:获取其所在的类的类名. __METHOD__:获取其所在的方法的方法名. class A{ function f1(){ echo __CLASS__: / ...
- 类、对象(java基础知识六)
1.Java约定俗成 java约定俗成 1,类名接口名 一个单词首字母大写,多个单词每个单词首字母都大写 2,方法名和变量名 一个单词全部小写,多个单词从第二个单词首字母大写 建议:如果能用英语尽量用 ...
- jQuery对象和DOM对象的相关知识
所谓的DOM就是Document Object Model(文档对象模型)的缩写,或许是我水平低的缘故,感觉就是HTML的标记元素嘛,所以作者画了下面的图: 像这样的元素,就是所谓的DOM对象,获取值 ...
- 学习笔记——Java类和对象
今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...
- Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用
转载自海子:http://www.cnblogs.com/dolphin0520/p/3803432.html Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封 ...
- C++类和对象(一)&&实现offsetof宏&&this指针
一.目录 1.对象的相关知识 2.类的定义 3.类的实例化 4.类对象模型 5.模拟实现offsetof宏 6.this指针 二.正文 1.对象的相关知识 C语言是面向过程的,关注的是过程,分析求解问 ...
- php 类和对象
⾯向对象是⼀种编程范式,它将对象作为程序的基本单元,将程序和数据封装起来, 以此来提⾼程序的重⽤性.灵活性和可扩展性. ⽬前很多语⾔都⽀持⾯向对象编程,既然对象对象是⼀种范式,其实这就和具体的编程语⾔ ...
- python 类,对象
声明类 ''' class 类名: '类的文档字符串' 类体 ''' #我们创建一个类 class Data: pass 声明类 class Person: #定义一个人类 role = 'perso ...
- python面向对象——类和对象
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程(流水线式) 优点:极大的降低了程序的复杂度 缺点:应用场景固定住了,可扩展性差 2.函数式编程 特点: a ...
随机推荐
- 叉积_判断点与三角形的位置关系 P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- copy()函数技术推演
/*** str_copy.c ***/ #include<stdio.h> void copy_str21(char *from, char *to) { for(; *from != ...
- 如何修复GitKraken Inotify Limit Error\idea erro - 升级Ubuntu / Linux inotify限制
GitKraken是一个非常优秀的Git客户端.如果您是软件开发人员,那么您绝对应该试试GitKraken.今天我去了我的一个存储库做了一些提交,但是GitKraken告诉我它已经得到了Inotify ...
- JetBrains CLion 2019 for Mac(智能C和C++编辑器)中英文如何切换完整教程
右键显示包内容,进入目录,contents/lib,删除resources_zh.jar,重启即可. 参考: https://blog.csdn.net/qq_45179462/article/det ...
- C语言的柔性数组的实现及应用
c编程的时候数组长度一般都是固定好的,实际上c还能实现变长数组.其实c99中确实是有变长数组的说法,C99中通过允许结构体中的最后一个成员是长度未知的数组实现变长数组,其定义格式如下: typedef ...
- [代码审计]php反序列化漏洞
0x01 php面向对象简介 对象:可以对其做事情的一些东西.一个对象有状态.行为和标识三种属性. 类:一个共享相同结构和行为的对象的集合. 每个类的定义都以关键字class开头,后面跟着类的名字. ...
- 快速创建 Vue 项目
转载:https://www.jianshu.com/p/c7df292915e7 为了便于 Vue 项目的管理, Vue 团队官方开发了 vue-cli 工具. 本文将带您使用 vue-cli 快速 ...
- 宝塔php open_basedir restriction in effect
解决方法一: 1.网站管理的 防跨站攻击去掉勾选,重启网站,清除浏览器缓存 解决方法二:
- Win10下轻松安装centos7.0(推荐)
Windows10下安装centos7.0虚拟机环境 Windows10自带了一个类似Vmware虚拟化产品Hyper-V管理器 如果没有找到这个的小伙伴可以从菜单中的windows管理工具找到如图: ...
- 006 GET API
1.说明 The get API allows to get a JSON document from the index based on its id. GET通过基于id的索引获取JSON文档. ...