热门标签 | 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

推荐阅读
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 利用 Zend Framework 实现高效邮件发送功能 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 自动加载机制在命名空间和类文件中的应用与优化
    自动加载机制在命名空间和类文件中的应用与优化 ... [详细]
  • 在 PHP 中使用 Restler 3 框架为不同方法添加身份验证时,可以根据方法参数的特定值来限制访问。例如,在 `Simple.php` 文件中定义的 `Simple` 类中,可以通过检查 `$name` 参数的值来决定是否允许调用 `item` 方法。这种细粒度的认证机制可以提高系统的安全性和灵活性。具体实现方式包括在方法内部进行条件判断,并结合框架提供的认证工具来实现访问控制。 ... [详细]
  • 本文对常见的字符串哈希函数进行了全面分析,涵盖了BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash等多种算法。这些哈希函数在不同的应用场景中表现出各异的性能特点,通过对比其算法原理、计算效率和碰撞概率,为实际应用提供了有价值的参考。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 资源管理器的基础架构包括三个核心组件:1)资源池,用于将CPU和内存等资源分配给不同的容器;2)负载组,负责承载任务并将其分配到相应的资源池;3)分类函数,用于将不同的会话映射到合适的负载组。该系统提供了两种主要的资源管理策略。 ... [详细]
  • 本文深入探讨了JavaScript中`this`关键字的多种使用方法和技巧。首先,分析了`this`作为全局变量时的行为;接着,讨论了其在对象方法调用中的表现;然后,介绍了`this`在构造函数中的作用;最后,详细解释了通过`apply`等方法改变`this`指向的机制。文章旨在帮助开发者更好地理解和应用`this`关键字,提高代码的灵活性和可维护性。 ... [详细]
  • 链栈虽然通常以数组作为底层实现,但也可以采用链表来构建Stack类。在这种情况下,空堆栈通过NULL指针表示。当新元素被压入堆栈时,它会被添加到链表的头部,从而实现高效的入栈操作。此外,出栈操作则通过移除链表头部的节点来完成,确保了操作的时间复杂度为O(1)。这种设计不仅简化了内存管理,还提高了动态数据处理的灵活性。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
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社区 版权所有