- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP中类与对象功能、用法实例解读由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了PHP中类与对象功能、用法。分享给大家供大家参考,具体如下:
类是面向对象程序设计的基本概念,是一类东西的结构描述 , 是一种抽象的概念 . 对象是一类东西的一个具体的实例 , 是具体事物 . 。
对象通过new关键字进行实例化: 比如汽车可以抽象为一个类,汽车拥有名字、轮胎、速度、重量等属性,可以有换挡、前进、后退等操作方法.
1
2
3
4
5
6
7
8
9
10
|
// 定义一个汽车类
class
Car {
$name
=
'汽车'
;
function
getName() {
return
$this
->name;
}
}
//对象通过new关键字进行实例化
$car
=
new
Car();
echo
$car
->getName();
|
在类中定义的变量称之为属性。属性声明是由关键字 public,protected 或者 private 开头,后面跟一个普通的变量声明来组成。属性的变量可以设置初始化的默认值,默认值必须是常量.
方法就是在类中的function,很多时候我们分不清方法与函数有什么差别,在面向过程的程序设计中function叫做函数,在面向对象中function则被称之为方法.
访问控制的关键字代表的意义为:
类属性的访问控制必须定义 , 即必须写出关键字 , 定义为三个中的一个 类方法不写关键字 , 则默认为公有的 。
1
2
3
4
5
6
7
8
9
10
11
12
|
class
Car {
public
$speed
= 0;
//增加speedUp方法,使speed加10
public
function
speedUp(){
$this
->speed += 10;
}
}
// 创建对象
$car
=
new
Car();
// 通过对象获取类属性与类方法
$car
->speedUp();
echo
$car
->speed;
|
PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作.
在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用.
同样,PHP5支持析构函数,使用__destruct()进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数.
1
2
3
4
5
6
7
8
9
10
11
|
class
Car {
function
__construct() {
print
"构造函数被调用 \n"
;
}
function
__destruct() {
print
"析构函数被调用 \n"
;
}
}
$car
=
new
Car();
//实例化时会调用构造函数
echo
'使用后,准备销毁car对象 \n'
;
unset(
$car
);
//销毁时会调用析构函数
|
当PHP代码执行完毕以后,会自动回收与销毁对象,因此一般情况下不需要显式的去销毁对象.
1
|
public
/
protected
/
private
static
$变量名
|
不用实例化类 , 直接调用 类名 :: $变量名 但实例化后 , 不允许使用 对象 -> $变量名 。
1
|
public
/
protected
/
private
static
function
方法名()
|
不用实例化类 , 直接调用 类名 :: 方法名() 实例化后 , 对象 -> 方法名() 静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class
Car {
private
static
$speed
= 10;
public
static
function
getSpeed() {
return
self::
$speed
;
}
public
static
function
speedUp() {
return
self::
$speed
+=10;
}
}
class
BigCar
extends
Car {
public
static
function
start() {
parent::speedUp();
}
}
BigCar::start();
echo
BigCar::getSpeed();
|
如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class
Car {
private
function
__construct() {
echo
'object create'
;
}
private
static
$_object
= null;
public
static
function
getInstance() {
if
(
empty
(self::
$_object
)) {
self::
$_object
=
new
Car();
//内部方法可以调用私有方法,因此这里可以创建对象
}
return
self::
$_object
;
}
}
$car
=
new
Car();
//这里不允许直接实例化对象
$car
= Car::getInstance();
//通过静态方法来获得一个实例
|
继承是面向对象程序设计中常用的一个特性,汽车是一个比较大的类,我们也可以称之为基类,除此之外,汽车还分为卡车、轿车、东风、宝马等,因为这些子类具有很多相同的属性和方法,可以采用继承汽车类来共享这些属性与方法,实现代码的复用.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class
Car {
public
$speed
= 0;
//汽车的起始速度是0
public
function
speedUp() {
$this
->speed += 10;
return
$this
->speed;
}
}
//建立一个Truck类,扩展Car类,并覆盖speedUp方法,使速度累加50
class
Truck
extends
Car{
public
function
speedUp(){
parent::speedUp();
$this
->speed += 50;
return
$this
->speed;
}
}
$car
=
new
Truck();
$car
->speedUp();
echo
$car
->speed;
|
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
class
Car {
private
$ary
=
array
();
public
function
__set(
$key
,
$val
) {
$this
->ary[
$key
] =
$val
;
}
public
function
__get(
$key
) {
if
(isset(
$this
->ary[
$key
])) {
return
$this
->ary[
$key
];
}
return
null;
}
public
function
__isset(
$key
) {
if
(isset(
$this
->ary[
$key
])) {
return
true;
}
return
false;
}
public
function
__unset(
$key
) {
unset(
$this
->ary[
$key
]);
}
}
$car
=
new
Car();
$car
->name =
'汽车'
;
//name属性动态创建并赋值
echo
$car
->name;
if
(
$car
->age){
echo
'有'
;
}
else
{
echo
'无'
;
}
unset(
$car
->name);
var_dump(
$car
->name);
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class
Car {
public
$speed
= 0;
public
function
__call(
$name
,
$args
) {
if
(
$name
==
'speedUp'
) {
$this
->speed += 10;
}
}
}
$car
=
new
Car();
$car
->speedUp();
//调用不存在的方法会使用重载
echo
$car
->speed;
|
对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符 == 进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符 === 进行判断.
1
2
3
4
5
6
|
class
Car {
}
$a
=
new
Car();
$b
=
new
Car();
if
(
$a
==
$b
)
echo
'=='
;
//true
if
(
$a
===
$b
)
echo
'==='
;
//false
|
对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术方法来设置属性的值.
1
2
3
4
5
6
7
8
9
10
11
12
|
class
Car {
public
$name
=
'car'
;
public
function
__clone() {
$obj
=
new
Car();
$obj
->name =
$this
->name;
}
}
$a
=
new
Car();
$a
->name =
'new car'
;
$b
=
clone
$a
;
var_dump(
$b
);
|
对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用.
1
2
3
4
5
6
7
8
|
class
Car {
public
$name
=
'car'
;
}
$a
=
new
Car();
$str
= serialize(
$a
);
//对象序列化成字符串
echo
$str
.
'<br>'
;
$b
= unserialize(
$str
);
//反序列化为对象
var_dump(
$b
);
|
希望本文所述对大家PHP程序设计有所帮助.
原文链接:https://blog.csdn.net/qq_36261130/article/details/103293291 。
最后此篇关于PHP中类与对象功能、用法实例解读的文章就讲到这里了,如果你想了解更多关于PHP中类与对象功能、用法实例解读的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
引言 深拷贝是指创建一个新对象,该对象的值与原始对象完全相同,但在内存中具有不同的地址。这意味着如果您对原始对象进行更改,则不会影响到复制的对象 常见的C#常见的深拷贝方式有以下4类:
人工智能是一种未来性的技术,目前正在致力于研究自己的一套工具。一系列的进展在过去的几年中发生了:无事故驾驶超过300000英里并在三个州合法行驶迎来了自动驾驶的一个里程碑;IBM Waston击败了
非法律建议。 欧盟《人工智能法案》 (EU AI Act) 是全球首部全面的人工智能立法,现已正式生效,它将影响我们开发和使用人工智能的方式——包括在开源社区中的实践。如果您是一位开源开发
我已经阅读了所有 HERE Maps API 文档,但找不到答案。 HERE实时流量REST API输出中的XML标签是什么意思? 有谁知道如何解释这个输出(我在我的请求中使用了接近参数)? 最佳答
我的 iPad 应用程序工作正常,我将其留在现场进行测试,但现在崩溃了[保存时?] 这是崩溃日志, Incident Identifier: 80FC6810-9604-4EBA-A982-2009A
我的程序需要 qsort 的功能才能运行,但到目前为止还没有完成它的工作。 我实际上是在对单个字符值的数组进行排序,以便将它们分组,这样我就可以遍历数组并确定每个属性的计数。我的问题是 qsort 返
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我正在尝试使用 AVR 代码对 Arduino Uno 进行编程,因为我不被允许在 9 月份开始的高级项目中使用 Arduino 库。我找到了数据表,让数字引脚正常工作,然后尝试通过 USB 串行连接
我遇到了多次崩溃,似乎 native iOS 方法正在从第三方库调用函数。这是一个例子: Thread: Unknown Name (Crashed) 0 libsystem_kernel.d
我理解如何按照 Dijkstra 算法的解释找到从头到尾的最短路径,但我不明白的是解释。在这里,从图中的图形来看,从 A 到 E 添加到我已知集合的顺序是 A,C,B,D,F,H,G,E 我没有得到的
我正在查看一些 Django 源代码并遇到了 this . encoding = property(lambda self: self.file.encoding) 究竟是做什么的? 最佳答案 其他两
Sentry 提供了很好的图表来显示消息频率,但关于它们实际显示的内容的信息很少。 这些信息是每分钟吗? 5分钟? 15分钟?小时? 最佳答案 此图表按分钟显示。这是负责存储该图数据的模型。 http
我对 JavaScript 和 Uniswap 还很陌生。我正在使用 Uniswap V3 从 DAI/USDC 池中获取价格。我的“主要”功能如下所示: async function main()
我正在尝试弄清楚我下载的 Chrome 扩展程序是如何工作的(这是骗子用来窃取 CS:GO 元素的东西,并不重要...)。我想知道使用什么电子邮件地址(或使用什么其他通信方式)来提交被钓鱼的数据。 这
引言 今天同事问了我一个问题, System.Windows.Forms.Timer 是前台线程还是后台线程,我当时想的是它是跟着UI线程一起结束的,应该是前台线程吧? 我确实没有仔
我需要一些使用 scipy.stats.t.interval() 函数的帮助 http://docs.scipy.org/doc/scipy/reference/generated/scipy.sta
当我在 Oracle 查询计划中看到类似的内容时: HASH JOIN TABLE1 TABLE2 这两个表中的哪一个是 hashed ? Oracle 文档指的是通常被散列的“较小”
我想知道 GridSearchCV 返回的分数与按如下方式计算的 R2 指标之间的差异。在其他情况下,我收到的网格搜索分数非常负(同样适用于 cross_val_score),我将不胜感激解释它是什么
本文分享自华为云社区《 多主创新,让云数据库性能更卓越 》,作者: GaussDB 数据库。 华为《Taurus MM: bringing multi-master to the clou
我真的需要一些帮助来破译这个崩溃报告: Process: Farm Hand [616] Path: /Applications/Farm
我是一名优秀的程序员,十分优秀!