返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php构造函数怎么使用
  • 276
分享到

php构造函数怎么使用

2023-06-29 00:06:49 276人浏览 薄情痞子
摘要

这篇“PHP构造函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php构造函数怎么使用”文章吧。php中有构造函数

这篇“PHP构造函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php构造函数怎么使用”文章吧。

php中有构造函数,其语法说明是“__construct(mixed ...$values = ""): void”,具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

php构造函数怎么使用

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php中有没有构造函数?

php 构造函数

__construct(mixed ...$values = ""): void

PHP 允许开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

注意: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

示例 #1 继承中的构造函数

<?phpclass BaseClass {    function __construct() {        print "In BaseClass constructor\n";    }}class SubClass extends BaseClass {    function __construct() {        parent::__construct();        print "In SubClass constructor\n";    }}class OtherSubClass extends BaseClass {    // 继承 BaseClass 的构造函数}// In BaseClass constructor$obj = new BaseClass();// In BaseClass constructor// In SubClass constructor$obj = new SubClass();// In BaseClass constructor$obj = new OtherSubClass();?>

与其它方法不同, __construct() 在继承时不受签名兼容性规则的约束。

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。不使用命名空间中的类则不受影响。 构造函数是一个普通的方法,在对应对象实例化时自动被调用。 因此可以定义任何数量的参数,可以是必选、可以有类型、可以有默认值。 构造器的参数放在类名后的括号里调用。

示例 #2 使用构造器参数

<?phpclass Point {    protected int $x;    protected int $y;    public function __construct(int $x, int $y = 0) {        $this->x = $x;        $this->y = $y;    }}// 两个参数都传入$p1 = new Point(4, 5);// 仅传入必填的参数。 $y 会默认取值 0。$p2 = new Point(4);// 使用命名参数(PHP 8.0 起):$p3 = new Point(y: 5, x: 4);?>

如果一个类没有构造函数,以及构造函数的参数不是必填项时,括号就可以省略。

旧式风格的构造器

PHP 8.0.0 之前,全局命名空间内的类如果有一个同名的方法,则会解析为旧式风格的构造器。 虽然函数能被当作构造器,但该语法已被废弃,并会导致 E_DEPRECATED 错误。 如果 __construct() 和同名方法同时存在时, 会调用 __construct()。

以下两种情况时,与类同名的方法不再有特殊意义:命名空间中的类、PHP 8.0.0 起的任何类。

新代码中要使用 __construct()。

构造器属性提升

PHP 8.0.0 起,构造器的参数也可以相应提升为类的属性。 构造器的参数赋值给类属性的行为很普遍,否则无法操作。 而构造器提升的功能则为这种场景提供了便利。 因此上面的例子可以用以下方式重写:

示例 #3 使用构造器属性提升

<?phpclass Point {    public function __construct(protected int $x, protected int $y = 0) {    }}

当构造器参数带访问控制(visibility modifier)时,PHP 会同时把它当作对象属性和构造器参数, 并赋值到属性。 构造器可以是空的,或者包含其他语句。 参数值赋值到相应属性后执行正文中额外的代码语句。

并非所有参数都需要提升。可以混合提升或不提升参数作为属性,也不需要按顺序。 提升后的参数不影响构造器内代码调用。

注意:

对象属性的类型不能为 callable 以避免为引擎带来混淆。 因此提升的参数也不能是 callable。 其他任意 类型声明 是允许的。

注意:

放在构造器提升参数里的属性会同时复制为属性和参数。

Static 创造方法

在 PHP 中每个 class 只能有一个构造器。 然而有些情况下,需要用不同的输入实现不同的方式构造对象。 这种情况下推荐使用 static 方法包装构造。

示例 #4 使用 static 创造方法

<?phpclass Product {    private ?int $id;    private ?string $name;    private function __construct(?int $id = null, ?string $name = null) {        $this->id = $id;        $this->name = $name;    }    public static function fromBasicData(int $id, string $name): static {        $new = new static($id, $name);        return $new;    }    public static function fromJSON(string $json): static {        $data = json_decode($json);        return new static($data['id'], $data['name']);    }    public static function fromXml(string $xml): static {        // 自定义代码逻辑。        $data = convert_xml_to_array($xml);        $new = new static();        $new->id = $data['id'];        $new->name = $data['name'];        return $new;    }}$p1 = Product::fromBasicData(5, 'Widget');$p2 = Product::fromJson($some_json_string);$p3 = Product::fromXml($some_xml_string);

可以设置构造器为 private 或 protected,防止自行额外调用。 这时只有 static 方法可以实例化一个类。 由于它们位于同一个定义的 class 因此可以访问私有方法,也不需要在同一个对象实例中。 当然构造器不一定要设置为 private,是否合理取决于实际情况。

三个 static 方法展示了对象以不同方式的实例化方式。

  • fromBasicData() 把所需的全部参数传入构造器,创建对象并返回结果。

  • fromJson() 接受 JSON 字符串,,预处理成构造器所需的格式,然后返回新的对象。

  • fromXml() 接受 XML 字符串并解析,然后创建一个单纯的对象。 由于参数都是可选的,使得可以忽略所有参数去调用构造器。然后为对象的属性赋值后返回结果。

在以上三个例子中,static 关键词会被翻译成代码所在类的类名。 这个例子中是 Product。

以上就是关于“php构造函数怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网PHP编程频道。

--结束END--

本文标题: php构造函数怎么使用

本文链接: https://lsjlt.com/news/321445.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php构造函数怎么使用
    这篇“php构造函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php构造函数怎么使用”文章吧。php中有构造函数...
    99+
    2023-06-29
  • C++构造函数怎么使用
    这篇文章主要讲解了“C++构造函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++构造函数怎么使用”吧!像是结构体,我们可以使用列表初始化的方法进行初始化:struct ...
    99+
    2023-06-22
  • C++构造函数与析构函数怎么使用
    这篇文章主要讲解了“C++构造函数与析构函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++构造函数与析构函数怎么使用”吧!对象的初始化和清理生活中我们买的电子产品都基本会有出厂...
    99+
    2023-07-02
  • PHP中构造函数如何使用
    这篇文章将为大家详细讲解有关PHP中构造函数如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP经过长时间的发展,很多用户都很了解PHP了,这里我发表一下个人理解,和大家讨论讨论。大...
    99+
    2023-06-17
  • C#中怎么使用构造函数
    本篇文章给大家分享的是有关C#中怎么使用构造函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#构造函数的名字不能随便起,必须让编译器认得出才可以被自动执行。它的命名方法既简...
    99+
    2023-06-17
  • go struct构造函数怎么使用
    在Go语言中,结构体(struct)是一种用户自定义的数据类型,用于封装若干个不同类型的数据字段。在结构体中,可以定义构造函数来创建...
    99+
    2023-10-10
    go
  • C++拷贝构造函数怎么使用
    本文小编为大家详细介绍“C++拷贝构造函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++拷贝构造函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。构造函数只有单个形参,该形参是对本类类型对...
    99+
    2023-06-30
  • Function()构造函数怎么用
    小编给大家分享一下Function()构造函数怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   Function()构造函数   函数同样可以通过内置的JavaScript函数...
    99+
    2024-04-02
  • js构造函数怎么用
    这篇文章将为大家详细讲解有关js构造函数怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。说明构造函数名的首字母必须大写。构造函数无需return即可返回结果。调用结构函数必须使用new关键词,只需ne...
    99+
    2023-06-20
  • C++构造函数怎么用
    这篇文章给大家分享的是有关C++构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.作用一种特殊类型的方法,在每次实例化对象时运行2.代码举例2.1 示例1:#include <ios...
    99+
    2023-06-25
  • JS的Function与构造函数怎么使用
    这篇文章主要讲解了“JS的Function与构造函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS的Function与构造函数怎么使用”吧! 1.概述Function是...
    99+
    2023-06-21
  • PHP 中的构造函数
    在本文中,我们将介绍 PHP 构造函数。我们将看到如何使用 __construct() 函数来初始化类中实例的属性。 我们还将使用该函数来初始化类中具有给定参数的对象的属性。 最后,我们将看到如...
    99+
    2024-02-27
  • javascript构造函数怎么借用
    本篇内容主要讲解“javascript构造函数怎么借用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript构造函数怎么借用”吧!说明调用子类构造函数中的父类构造函数。采用apply...
    99+
    2023-06-20
  • C++类、对象、构造函数及析构函数怎么定义使用
    这篇文章主要介绍“C++类、对象、构造函数及析构函数怎么定义使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类、对象、构造函数及析构函数怎么定义使用”文章能帮助大家解决问题。C++类与对象C...
    99+
    2023-07-06
  • C++11继承的构造函数怎么使用
    本篇内容主要讲解“C++11继承的构造函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11继承的构造函数怎么使用”吧!多重继承的情况上述方法在多重继承时仍然有效,除了一种情况:被...
    99+
    2023-06-19
  • Android开发Dart Constructors构造函数怎么使用
    这篇文章主要讲解了“Android开发Dart Constructors构造函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android开发Dart Cons...
    99+
    2023-06-30
  • PHP中怎么利用parent调用父类构造函数
    这篇文章将为大家详细讲解有关PHP中怎么利用parent调用父类构造函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我们知道PHP parent是指向父类的指针,一般我们使用parent来...
    99+
    2023-06-17
  • C#中的构造函数怎么用
    这篇文章主要介绍了C#中的构造函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中的构造函数怎么用文章都会有所收获,下面我们一起来看看吧。C# 中的构造函数类的 构造函数 是类的一...
    99+
    2023-06-17
  • javascript new怎么调用构造函数
    本篇内容主要讲解“javascript new怎么调用构造函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript new怎么调用构造函数”吧!说明在内存中创建新对象。新对象内部的...
    99+
    2023-06-20
  • C#中怎么调用构造函数
    这篇文章给大家介绍C#中怎么调用构造函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#调用构造函数是如何的呢?让我们首先来看看什么是构造函数?C#调用构造函数之构造函数定义:它是在创建给定类型的对象时执行的类方法。...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作