热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Php面向对象学习笔记?构造、析构、对象赋值、克隆

Php面向对象学习笔记?构造、析构、对象赋值、克隆:Php面向对象学习笔记?构造、析构、对象赋值、克隆classstudent{public$stu_id;定义成员变量public
Php面向对象学习笔记 ? 构造、析构、对象赋值、克隆

class student

{

public $stu_id; // 定义成员变量

public $stu_name;

public function sayName() // 成员函数

{

echo $this->stu_name; // $this 访问该对象的成员变量

}

}

$stu = new Student; // 创建对象

$stu->stu_id = ‘0607001’;

$stu->stu_name = ‘小李’;

$stu->sayName();

注意:

class student

{

public $stu_id; // 定义成员变量

public $stu_name;

public function sayName() // 成员函数

{

var_dump($stu_name);

var_dump($GLOBALS[‘stu_name’]); // 两种方法都无法访问成员变量

//只要使用$this-> 才能访问成员变量

}

}

$stu = new Student; // 创建对象

$stu->stu_id = ‘0607001’;

$stu->stu_name = ‘小李’;

$stu->sayName();

注:类中定义的属性,不相当于类中定义的全局变量,不能直接再方法中使用属性变量的形式访问。

1. 构造和析构:

php的opp机制,在new完成时,会试着调用一个叫做__construct()的方法。

如果我们将初始化的代码,写到这个方法内,就可以完成自动初始化。

例子:

class Student

{

public $stu_id;

public $stu_name;

public function__construct($id,$name) // 构造

{

$this->stu_id= $id;

$this->stu_name= $name;

}

}

$stu = new Student(‘100511101’,’songyang’);

注:如果构造方法没有参数,则 $stu = new Student 和 $stu = new Student() 都是对的。

构造方法的兼容性问题:

php5,构造方法的名字,就是__construct().在php5之前,构造方法的名字为与类同名。为了兼容,也同时支持与类同名的构造方法。

如果同时出现__construct() 和类名的构造方法:

例子:

class Student

{

public $stu_id;

public $stu_name;

public function __construct()

{

echo“construct run …”;

}

public function Student()

{

echo‘’Student run …”;

}

{

$stu = new Student;

输出:construct run …

结论:如果同时出现两种构造方法,调用__construct()

析构:

在对象被销毁时,也会自动执行一个方法。

析构方法名字为:__destruct();

class Student

{

public $stu_id;

public $stu_name;

public function __construct()

{

echo“构造方法调用”;

}

//析构

publicfunction __destruct()

{

//释放资源

echo“析构方法调用”;

}

}

该方法,用于释放,该对象所占用的额外资源,不是对象本身的内存空间!

什么情况下,对象会被销毁:

1. 脚本周期结束,对象自动被销毁。

2. 销毁保存该对象的变量。

$stu = new Student;

unset($stu);

输出:析构方法调用

3. 保存对象的变量,被赋值了其他数据。

$stu = new Student;

$stu = “new Value”; // 赋值其他数据时,Student对象被销毁。

对象间的赋值

对象支持引用传递,不用&符号,因此不能通过=赋值的形式,得到一个新的对象。

例子

class Student

{

public $stu_id;

public $stu_name;

public function __construct($id,$name)

{

$this->stu_id= $id;

$this->stu_name= $name;

}

}

$stu1 = new Student(“100”,”song”);

$stu2 = $stu1;

echo $stu1->stu_name;

echo $stu2->stu_name;

$stu1->stu_name = “songyang”;

echo $stu1->stu_name;

echo $stu2->stu_name;

输出:song song songyang songyang

克隆

利用已有对象,得到相同的新对象。

需要使用关键字 clone

新对象 = clone 已有对象

例子:

class Student

{

public $stu_id;

public $stu_name;

public function __construct($id,$name)

{

$this->stu_id= $id;

$this->stu_name= $name;

}

}

$stu1 = new Student(“100”,”song”);

$stu2 = clone $stu1;

echo $stu1->stu_name;

echo $stu2->stu_name;

$stu1->stu_name = “songyang”;

echo $stu1->stu_name;

echo $stu2->stu_name;

输出:song song songyang song

常见的操作,再克隆对象时,需要对对象的某些特殊属性进行修改。意味着,需要做一些特殊的处理。

使用,在克隆时,自动调用的方法 __clone()来实现。

自动使用克隆出来的对象,来调用这个__clone()方法,意味着,该方法内部的$this,表示新对象。

例子:

class Student

{

public $stu_id;

public $stu_name;

public function __construct($id,$name)

{

$this->stu_id= $id;

$this->stu_name= $name;

}

public function __clone()

{

$this->stu_id= “0607002”;

}

}

$stu1 = new Student(“1000”,”joker”);

$stu2 = clone $stu1;

echo $stu1->stu_id;

echo $stu2->stu_id;

输出:1000 0607002

推荐阅读
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了GregorianCalendar类的基本信息,包括它是Calendar的子类,提供了世界上大多数国家使用的标准日历系统。默认情况下,它对应格里高利日历创立时的日期,但可以通过调用setGregorianChange()方法来更改起始日期。同时,文中还提到了GregorianCalendar类为每个日历字段使用的默认值。 ... [详细]
author-avatar
乐土网6868
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有