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 ...
随机推荐
- I9300 国行联通定制修复手记
同事拿来个I9300给我修,说是打不了电话,试了一下,打电话的时候会提示“网络未注册”,于是果断找了个国行的4.1.2五件套刷砖.5分钟后,刷机成功,开机拨号,依旧是这个问题,怎么回事呢?上百度一查, ...
- 数据结构实验之排序二:交换排序 (SDUT 3399)
#include <iostream> #include <bits/stdc++.h> using namespace std; typedef long long ll; ...
- jquery.nicescroll.js Unable to preventDefault inside passive event listener due to target being treated as passive.
解决办法就是:https://github.com/bestjhh/Plugin 下载替换. 参考: https://github.com/bestjhh/Plugin https://blog.cs ...
- Elasticsearch单机部署
1.下载安装包 下载地址:https://www.elastic.co/downloads/elasticsearch 我这里下载的是 elasticsearch-6.4.0.tar.gz保存至/op ...
- [转] 修改sqlserver的数据库名、物理名称和逻辑文件名
转载: https://blog.csdn.net/dym0080/article/details/81017777
- Nginx介绍和使用
Nginx介绍和使用 一.介绍 Nginx是一个十分轻量级并且高性能HTTP和反向代理服务器,同样也是一个IMAP/POP3/SMTP代理服务器. 二.特性 HTTP服务器 反向代理服务器 简单的负载 ...
- 14.LAMP服务 Linux Apache Mysql Php和防护机制 xinetd、tcp wapper
一.安装LAMP服务 Linux Apache Mysql Php 要求操作系统支持 php解析 apache调用php插件解析 phpmyadmin yum install ...
- NoSql数据库MongoDB系列(1)——MongoDB简介
一.NoSQL简介 NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库 .是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.No ...
- ubuntu取消自动登录
/etc/lightdm/lightdm.conf.d/50-nvidia.conf 注释 autologin-user=<YOUR USER>
- k8s 集群部署--学习
kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) Pod:若 ...