`

对PHP构造函数的理解

    博客分类:
  • PHP
阅读更多
做项目的时候遇到了一些错误,最终分析,是php的构造方法在作怪,这里重新整理了一下:
php5开始可以在类中声明__construct构造方法,当对象被实例化的时候,该方法被调用。
注意:
1.如果在继承的子类中没有构造方法而父类中有构造方法,那么当实例化子类时,父类的构造方法会被隐式调用。
2.如果子类有构造方法,父类中也有构造方法,那么子类要显示调用parent::__construct()才能父类的构造方法。

为了向后兼容,如果在php5类中没有找到__construct()方法,它会去找与类名相同的方法名的构造器,但是如果同时使用两个构造器,有可能会发生 E_STRICT 级别的错误信息:
(以下代码是本人web环境:win32+php5.3.8+apache2.2测试)
<?php
class B{
	//构造器
	public function B(){
		echo 'this is B()';
	}
	
	public function __construct(){
		echo 'this is __construct()';
	}
	
	public function other(){
		//do something
	}
}
$b = new B();
?>

结果:Strict Standards: Redefining already defined constructor for class B in D:\xampp\htdocs\test3\Class.php on line 8
this is __construct()

但仅调换下方法的位置结果却不一样:
<?php
class X{
	//构造器
	public function __construct(){
		echo 'this is __construct()';
	}
	
	
	public function X(){
		echo 'this is X()';
	}

	public function other(){
		//do something
	}
}
$x = new X();
?>


其实,从php5.3.3开始,与类名相同的方法不再做为类的构造方法,命名空间类也一样,要是使用的是php5.3.3以上的版本,就不能使用与类同名的方法作为构造方法了:
<?php
namespace Foo;
class Bar {
    public function Bar() {
        // PHP 5.3.0-5.3.2 是构造方法
        // PHP 5.3.3 被当做是正常的方法使用
    }
}
?>


如果非要在php5.3.3以上同时使用两个构造器,那么可以这样:
<?php
class Y{
	//构造器
	public function __construct(){
		self::Y();
	}


	public function Y(){
		echo 'this is __construct() called Y()';
		// do init
	}

	public function other(){
		//do something
	}
}
$y = new Y();
?>
分享到:
评论

相关推荐

    PHP中文教程:PHP面向对象语法(构造函数、析构函数、引用)

    通过深入理解构造函数、析构函数和引用,开发者可以更有效地利用PHP的面向对象特性,编写出高效、可维护的代码。在实际项目中,这些概念对于创建复杂的、具有状态和行为的对象至关重要,尤其是在需要管理资源和确保...

    php构造函数实例讲解

    在PHP编程语言中,构造函数是一种特殊的方法,它在创建对象时自动被调用,用于初始化...通过以上讲解和实例,你应该对PHP构造函数有了更深入的理解。在实际编程中,合理地运用构造函数可以提高代码的清晰度和可维护性。

    php构造函数的继承方法

    在PHP编程语言中,构造函数是一种特殊的方法,用于在创建对象时执行初始化操作。当一个类实例化时,构造函数会被自动调用...在实际开发中,理解并熟练掌握构造函数的继承机制,可以更好地设计和实现复杂的类层次结构。

    PHP程序设计-3期(KC016) 3.8.1创建和使用类常见问题:构造函数和析构函数.docx

    总结起来,理解并正确使用PHP中的构造函数和析构函数至关重要。它们允许我们在对象创建和销毁时进行关键操作,如设置初始值或清理资源。避免上述常见错误可以确保代码的正确性和可维护性。在编写类时,请始终注意...

    php基础知识:类与对象(3) 构造函数和析构函数

    首先,让我们来理解构造函数。在PHP 5及更高版本中,构造函数是一种特殊的方法,用于在创建类的新实例时自动调用。它的主要目的是进行对象初始化,例如设置初始值、分配资源或执行其他必要的设置步骤。构造函数的...

    PHPweb2.0网站开发高级开发技术—PHP面向对象语法(构造函数、析构函数、引用)

    课程由经验丰富的方老师主讲,内容涵盖了 PHP 面向对象的基本概念及其高级应用,如构造函数、析构函数以及引用等重要知识点。 #### 二、面向对象基础 — 构造函数 **构造函数定义**: - 构造函数是一种特殊的类...

    PHP程序设计-3期(KC016) 3.8.1创建和使用类课后习题: 构造函数和析构函数.doc

    理解并熟练运用构造函数和析构函数是掌握PHP面向对象编程的关键步骤。它们帮助我们更好地控制对象的生命周期,实现更高效的代码。在实际编程中,我们可以根据需要在构造函数中执行更多的初始化逻辑,或者在析构函数...

    PHP高级对象构建 多个构造函数的使用

    这种多构造函数的模式在需要根据参数类型进行不同操作的情景下非常有用,例如在数据类型不确定或者需要对不同类型的数据进行不同处理的情况下。然而,这样的设计也增加了代码的复杂性,因此在实际应用中需要权衡其...

    PHP程序设计-3期(KC016) 3.8.1创建和使用类拓展知识:构造函数和析构函数.doc

    在PHP程序设计中,类是面向对象编程的基础,而构造函数和析构函数则是类中两个至关重要的特殊方法。构造函数用于在创建对象时初始化对象的状态,而析构函数则在对象生命周期结束时执行清理操作。在PHP中,虽然不直接...

    PHP 类与构造函数解析

    本文档详细解析了PHP类及其构造函数的概念、用法以及PHP 5版本后的一些变化。 ### 类的创建 在PHP中创建类使用关键字 `class` 后跟类名,然后使用大括号 `{}` 包含类的定义。类定义结束后不需要加分号。例如: ``...

    PHP 构造函数和析构函数原理与用法分析

    PHP中的构造函数和析构函数是面向对象编程中的两个重要概念。构造函数用于在创建对象时初始化对象,而析构函数则用于在对象生命周期结束时执行清理工作。 构造函数: 在PHP中,构造函数被命名为__construct()。当...

    PHP构造函数与析构函数用法示例

    - php构造函数与析构函数 - php构造函数的继承方法 - php构造函数实例讲解 - Php 构造函数construct的前下划线是双的 - _PHP高级对象构建 多个构造函数的使用 - PHP 构造函数和析构函数原理与用法分析 了解这些内容...

    解决PHP4.0 和 PHP5.0类构造函数的兼容问题

    总结来说,当处理PHP4和PHP5类构造函数的兼容性问题时,关键点在于理解两个版本构造函数的差异,并在代码中加入兼容层。通过在类中定义两个构造函数,并在PHP4的构造函数中显式调用__construct方法,可以实现代码对...

    php构造函数与析构函数

    在PHP编程中,构造函数和析构函数是非常关键的概念,它们分别在对象生命周期的开始和结束时执行,确保对象的正确初始化和资源的合理释放。构造函数主要用于在对象创建后立即进行成员变量的初始化,而析构函数则在...

    Php 构造函数construct的前下划线是双的_

    总结起来,理解PHP中的构造函数`__construct()`及其正确用法对于避免`function non object`这样的错误至关重要。同样,了解如何使用`SimpleXMLElement`类的构造函数来解析和操作XML数据也是PHP开发中的基础技能。...

Global site tag (gtag.js) - Google Analytics