1、背景:在一次输出错误信息,引入Componets\下的ErrorCode的类文件报错,报错的信息是该类找不到;然而那个类文件明明存在的阿,怎么会报错呢?

2、解决过程:看类加载器如何加载该类。通过框架的入口文件,一步步地找到加载类,看到类加载器中输出的类名路径是正确的(相对路径),而加载类是仍然不存在,并且使用了file_exists函数判断该文件,发现该文件也不存在,这样自己百思不得其解。

过段时间,感觉任何在__destruct()函数创建对象是否都会报错呢?于是实验,感觉果真如此,自己以为找到原因了。但是为什么在__destruct函数创建对象会报错呢?难道真的不能够在__destruct()中创建函数吗?感觉这个理论不太成立。于是进行了这样的实验:

 <?php
class Img{
public function info(){
echo 'I am a Img Class!';
}
} class Test{
public function __construct(){ } public function info(){
echo 'I am a Test Class!';
} public function __destruct(){
$img = new Img();
$img->info();
}
} $test = new Test();
$test->info();

创建对象成功,那么说明__destruct()函数是可以创建对象的。那么是否是__destruct()函数不能够引入文件,于是

分两个文件

一个是Img.class.php文件

 <?php
class Img{
public function info(){
echo 'I am a Img Class!';
}
}

另一个是test.php文件

<?php
class Test{
public function __construct(){ } public function info(){
echo 'I am a Test Class!';
} public function __destruct(){
require './Img.class.php';
$img = new Img();
$img->info();
}
} $test = new Test();
$test->info();

结果果真如此,在__destruct()函数中引入类文件是不行的。那么为什么如此呢?

参考这篇文章:http://tieba.baidu.com/p/4529490669

原来__destruct()函数调用时目录已经发生变化,所以造成加载不了类文件。

要解决的方法是:使用绝对路径就可以了。

test.php文件的代码这样:

 <?php
class Test{
public function __construct(){ } public function info(){
echo 'I am a Test Class!';
echo '<br>';
echo getcwd();
} public function __destruct(){
//require './Img.class.php';
require "D:\\wamp\\www\\img\\Img.class.php";
$img = new Img();
$img->info();
echo '<br>';
echo getcwd();
}
} $test = new Test();
$test->info();

关于php析构函数__destruct()的问题的更多相关文章

  1. php部分---面向对象:定义、实例化、构造函数、析构函数;

    类 − 定义了一件事物的抽象特点.类的定义包含了数据的形式以及对数据的操作. 对象 − 是类的实例.一切皆对象.由类实例化出来的. 成员变量 − 定义在类内部的变量.该变量的值对外是不可见的,但是可以 ...

  2. php魔术方法——构造函数和析构函数

    php有一类很神奇的方法,这些方法是保留方法,通常不会在外部被显式调用,他们使用双下划线(__)开头,他们被称为魔术方法(Magic Methods).php官方也不建议定义其他双下划线开头的方法. ...

  3. php 析构函数,构造函数

    php 析构函数,构造函数   <?php /** * 测试使用的PHP操作类 * Date: 2017/7/13 * Time: 14:22 */class Test{ /** 姓名 */ p ...

  4. php面向对象之构造函数和析构函数

    php面向对象之构造函数和析构函数 简介 php面向对象支持两种形式的构造函数和析构函数,一种是和类同名的构造函数(php5.5之前),一类是魔术方法(php5.5之后).与类名相同的构造函数优先级比 ...

  5. PHP 构造函数和析构函数

    构造函数 __construct ([ mixed $args [, $... ]] ) : void PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先 ...

  6. PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)

    在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...

  7. 构造函数 析构函数的区别与联系 C#

    构造函数 __construct:是在对象被创建是自动调用的方法,用来完成初始化操作 构造函数有以下特点:1.构造函数的名字必须与类名相同:2.构造函数可以有任意类型的参数,但不能具有返回类型:3.定 ...

  8. web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记

    hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...

  9. 面向对象的PHP

    类的实例(包括继承) <?php // 父类 class Animal { public $name; public $age; // 构造函数,使用new操作符生成实例的时候自动调用 func ...

随机推荐

  1. 编程习题——Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  2. Linux 查看支持的语言,日期,时间,计算器

    1.查看系统目前支持的语言 echo %LANG 2.查看日历 cal 3.查看日期时间 date 4.计算器 bc

  3. 专访CEO何朝曦:深信服高速成长的秘诀

    在深信服公司深圳总部的办公室里,要迅速找到几位高管的工位远远不如找一位女员工的座位那样容易. 深信服CEO何朝曦先生 公司里虽然女孩很少,但几乎每位女员工的工位上都有一盆绿植.相比之下,从公司CEO何 ...

  4. cocos2dx mac下搭建android开发环境

    1)下载eclipse 地址:http://www.eclipse.org/downloads/ 2)安装adt 打开eclipse,菜单:help->install new software ...

  5. 《windows程序设计》学习_2.1:初识消息

    #include <windows.h> //#define WM_MYMSG (WM_USER +100) LRESULT CALLBACK WndProc(HWND,UINT,WPAR ...

  6. CSSBox - Java HTML rendering engine

    CSSBox - Java HTML rendering engine CSSBox is an (X)HTML/CSS rendering engine written in pure Java. ...

  7. nodejs - json序列化&反序列化示例

    // demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...

  8. Ubuntu Git安装

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.通过使用git工具,我们可以实现团队间合作开发统一管理,可以从远程仓库中提取代码,也可以把代码上传到远程仓库,从而实现 ...

  9. Objective-c 字典对象

    oc 中的 NSDictionary 的作用同 java 中的字典类相同,提供了 “键-值”对的组合.比如,是用字典类实现对学生姓名和学号的存放,编号是一个键(唯一性),姓名是值.它的方法有: 下面通 ...

  10. 控制所生成的servlet的结构: JSP page指令

    在JSP中,主要有3种类型的指令:page, include和taglib.page指令允许我们通过类的导入.servlet超类的定制.内容类型的设置.以及诸如此类的事物来控制servlet的结构.p ...