通常一提到 PHP 的构造函数和析构函数,就会想到两个单词 construct 和 destruct,构造和解构。

在学习 PHP 的时候,了解到的构造函数和析构函数就是 __construct() 和 __destruct()。以 __ 开头的方法在 PHP 中称为魔术方法。

PHP 中的魔术方法

__construct(), __destruct(),__call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()

在一个类里这些方法名属于保留字段,除非是要使用魔术功能,否则不应该使用。

学习的时候就想到了 Java 中的构造函数定义方式,定义一个与类名相同的方法,这个方法就是类的构造方法。Java 中的是否存在析构方法不清楚,想来是没有的,因为 Java 有自己的回收机制,不需要代码层面定义。

PHP5 之前的版本中,与类名同名的方法也是可以作为构造函数。为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法却被用于其它用途时。

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

PHP 官方文档说明了这两种构造函数的定义和使用方法。至于为什么中途弃用同名构造函数,不得而知。因为现有的 PHP 版本都是 5 ~ 7,所以同名构造函数用的越来越少。

以下是我在图片上传类中找到一个适配各种版本 PHP 的构造函数写法:class image {

...

function __construct($img){

...

}

function image($img) {

$this->__construct($img);

}

}

php中类的构造函数是,PHP 类的构造函数和析构函数相关推荐

  1. 6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数

    1 继承基类的构造函数 class A{public:A(){}; // A的构造函数 }; class B : public A{public:using A:A: } 2 单继承的构造函数 cla ...

  2. php中类的构造函数是,php类与构造函数解析

    关于类大家都有一定的认识这里只介绍在php中类值得注意的地方 ----类的创建---- php使用关键字class创建一个类,并且使用一对大括号 如: class name{ public $n=&q ...

  3. java 构造函数和_Java类和构造函数

    我希望这听起来不像是一个愚蠢的问题. 我有一个A类和一个B类.现在唯一的B就是一个String ID. 现在我可以有多个对象A,每个对象可以有0个或更多B类型的对象. 它们包含在每个类A具有的Hash ...

  4. 派生类的构造函数和复制控制

    因为派生类是从基类继承而来的,所以包含了基类的一些成员,所以在写派生类的构造函数和复制控制函数时,必须考虑基类的影响. 先说构造函数,派生类的构造函数中,并不直接初始化基类的成员,而是调用基类的构造函 ...

  5. 类的构造函数与析构函数

    当派生类中含有对象成员时,构造函数调用顺序:基类构造函数→对象成员的构造函数→子类构造函数,析构函数则相反 1.类的构造函数(初始化函数) 所谓初始化,就是把一个刚创建的数据设置成我想要的值,而不是一 ...

  6. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  7. C++中基类与派生类的构造函数和析构函数

    1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...

  8. java反射类带构造函数_java中反射类的加载和构造函数

    我们先创建了一个Person类 package reflect; public class Person { public String name = "zhangsan"; pu ...

  9. C++类的构造函数不能为虚函数的原因

    1 C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化: 我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的 ...

最新文章

  1. 2021年大数据常用语言Scala(二十一):函数式编程 遍历 foreach
  2. Uber将动态调价机制引入其外卖服务UberEats
  3. Lindström–Gessel–Viennot lemma
  4. 每周一算法之六——KMP字符串匹配算法
  5. STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结
  6. 徒手打造基于Spark的数据工厂(Data Factory):从设计到实现
  7. 基于HAPCG 算法的异源影像/多模态图像匹配
  8. 微博html5版登录网址,微博网页版登录入口
  9. 说长道短注册码、序列号
  10. svn合并分支到主干
  11. 什么是计算机在自动控制中的应用,计算机在自动控制中的应用
  12. Java面向对象编程练习题(28题集)
  13. 华为普工一个月的工资是多少?
  14. Python办公自动化 5.1 Python操作ppt:win32com 使用教程 操作复制ppt PowerPoint
  15. 最近学习太焦虑,如何戒骄戒躁,静下心来
  16. Algorithm:C++语言实现之Hash哈希算法相关(dbj2、sdbm、MurmurHash)
  17. Direct3D中的光照
  18. 删除提示框 MessageBox弹框
  19. vue中因数据延迟导致echarts无法渲染问题
  20. 地图导航APP开发功能

热门文章

  1. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
  2. select初始化默认选项
  3. C 线程池(不稳定的方案)
  4. C#各种小知识点总结
  5. [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之jetty篇(一)...
  6. C++调用web服务(java事例供参考)
  7. python官网下载手机版步骤-Python
  8. python爬虫教程入门-零基础入门Python爬虫不知道怎么学?这是入门的完整教程
  9. 网页爬虫 python-Python爬虫解析网页的4种方式
  10. python 加注拼音-又一个奇葩要求,Python是如何将“中文”转“拼音”的?