PHP加载

include() 函数

include() 函数可获得指定文件中的所有文本,并把文本拷贝到使用 include 函数的文件中。

例子 1

假设您拥有一个标准的页眉文件,名为 "header.php"。如需在页面中引用这个页眉文件,请使用 include() 函数,就像这样:

<html>
<body><?php include("header.php"); ?><h1>Welcome to my home page</h1><p>Some text</p></body>
</html>

例子 2

现在,假设我们有一个在所有页面上使用的标准菜单文件。请看下面这个 "menu.php"

<html>
<body><a href="http://www.w3school.com.cn/default.php">Home</a> |
<a href="http://www.w3school.com.cn/about.php">About Us</a> |
<a href="http://www.w3school.com.cn/contact.php">Contact Us</a>

三个文件,"default.php"、"about.php" 以及 "contact.php" 都引用了 "menu.php" 文件。这是 "default.php" 中的代码:

<?php include("menu.php"); ?><h1>Welcome to my home page</h1><p>Some text</p></body>
</html>

如果您在浏览器中查看 "default.php" 的源代码,应该类似这样:

<html>
<body><a href="default.php">Home</a> |
<a href="about.php">About Us</a> |
<a href="contact.php">Contact Us</a><h1>Welcome to my home page</h1>
<p>Some text</p></body>
</html>

同时,当然,我们也将用相同的方法处理 "about.php" 和 "contact.php"。通过使用引用文件,在您需要重命名链接、更改链接顺序或向站点添加另一张网页时,只要简单地更新 "menu.php" 文件中的文本即可。

require() 函数

require() 函数与 include() 相同,不同的是它对错误的处理方式。

include() 函数会生成一个警告(但是脚本会继续执行),而 require() 函数会生成一个致命错误(fatal error)(在错误发生后脚本会停止执行)。

如果在您通过 include() 引用文件时发生了错误,会得到类似下面这样的错误消息:

PHP 代码:

<html>
<body><?php
include("wrongFile.php");
echo "Hello World!";
?></body>
</html>

错误消息:

Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5Warning: include() [function.include]:
Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5Hello World!

请注意,echo 语句依然被执行了!这是因为警告不会中止脚本的执行。

现在,让我们使用 require() 函数运行相同的例子。

PHP 代码:

<html>
<body><?php
require("wrongFile.php");
echo "Hello World!";
?></body>
</html>

错误消息:

Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5Fatal error: require() [function.require]:
Failed opening required 'wrongFile.php'
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5

由于在致命错误发生后终止了脚本的执行,因此 echo 语句不会执行。

正因为在文件不存在或被重命名后脚本不会继续执行,因此我们推荐使用 require() 而不是 include()。

自动加载类库文件

当类多了以后,比如要在一个文件中载入3个类库文件:a.class.php,b.class.php,c.class.php要用三个

require_once(‘classes/a.class.php);
require_once(‘classes/b.class.php);
require_once(‘classes/c.class.php);
可以用PHP5自动加载的功能来处理:在全局应用配置文件中,定义一个特殊的函数__autoload($class)函数(__autoload并不是一个类的方法,只是单独的函数,和类没有关系):
function __autoload($class)

{
require_once(“classes/$class)
}
该函数放哪没有关系,在创建类实例时,也不必去调用这个autoload函数。PHP会自动完成。但务必注意一点:“在调用页面上创建实例所使用的类名 称”、和“被调用的文件名”、以及“该文件中的类的名称”3个必须是一样的。这样就不需要去调用__autoload();如果不一样则必须单独调用 __autoload(‘c’);并给它一个文件名前缀。

关于根路径:php里面“/”代表根路径:指该文件所在的磁盘比如:D:/
html里面/代表根路径:指服务器文件夹:www

    function __autoload($class_name) {  echo '__autload class:', $class_name, '<br />';  }  function classLoader($class_name) {  echo 'SPL load class:', $class_name, '<br />';  }  spl_autoload_register('classLoader');  new Test();//结果:SPL load class:Test

语法:bool  spl_autoload_register ( [callback $autoload_function] )    接受两个参数:一个是添加到自动加载栈的函数,另外一个是加载器不能找到这个类时是否抛出异常的标志。第一个参数是可选的,并且默认指向 spl_autoload()函数,这个函数会自动在路径中查找具有小写类名和.php扩展或者.ini扩展名,或者任何注册到 spl_autoload_extensions()函数中的其它扩展名的文件。

include("/wamp/www/0607/Ren.class.php");
include "Ren.class.php";require("Ren.class.php");
require "Ren.class.php";require_once("Ren.class.php");
require_once "Ren.class.php";

    if(false === spl_autoload_functions()){      if(function_exists('__autoload')){      spl_autoload_registe('__autoload',false);      }      }

spl_autoload_functions()函数会返回已注册函数的一个数组,如果SPL自动加载栈还没有被初始化,它会返回布尔值false。然 后,检查是否有一个名为__autoload()的函数存在,如果存在,可以将它注册为自动加载栈中的第一个函数,从而保留它的功能。之后,可以继续注册 自动加载函数。

还可以调用spl_autoload_register()函数以注册一个回调函数,而不是为函数提供一个字符串名称。如提供一个如array('class','method')这样的数组,使得可以使用某个对象的方法。

php复制对象

对象复制

在多数情况下,我们并不需要完全复制一个对象来获得其中属性。但有一个情况下确实需要:如果你有一个 GTK窗口对象,该对象持有窗口相关的资源。你可能会想复制一个新的窗口,保持所有属性与原来的窗口相同, 但必须是一个新的对象(因为如果不是新的对象,那么一个窗口中的改变就会影响到另一个窗口)。还有一种情况: 如果对象A中保存着对象B的引用,当你复制对象A时,你想其中使用的对象不再是对象B而是B的一个副本,那么 你必须得到对象A的一个副本。

对象复制可以通过clone关键字来完成(如果对象中存在__clone()方法,会先被调用)。对象中的 __clone()方法不能直接调用。

$copy_of_object = clone $object;

class Ren{public $name;public $sex;function __construct($n,$s){$this->name=$n;$this->sex = $s;}function __clone(){$this->name = "李四"; //this代表的是复本对象//$that->name = "lisi"; //that代表原本,后来废弃了}
}//克隆
$r1 = clone $r;用来复制对象的

php面向对象之__toString()

__toString()是快速获取对象的字符串信息的便捷方式,似乎魔术方法都有一个“自动“的特性,如自动获取,自动打印等,__toString()也不例外,它是在直接输出对象引用时自动调用的方法。

__toString()的作用

当我们调试程序时,需要知道是否得出正确的数据。比如打印一个对象时,看看这个对象都有哪些属性,其值是什么,如果类定义了toString方法,就能在测试时,echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据。


转载于:https://www.cnblogs.com/zoubizhici/p/5570580.html

php克隆 自动加载相关推荐

  1. 大话PHP设计模式:类自动载入、PSR-0规范、链式操作、11种面向对象设计模式实现和使用、OOP的基本原则和自动加载配置...

    一.类自动载入 SPL函数 (standard php librarys) 类自动载入,尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_registe ...

  2. php 类自动执行,php类中的魔术方法及类的自动加载

    类的模式方法都是 public 的,以 两个下划线开头,在某些情况下自动被调用,有点类似 hook 或者 事件触发. 魔术方法的传参方式不能使用引用. __construct() : 构造函数,实例化 ...

  3. ajax自动加载blogjava和博客园的rss

    自动加载blogjava和博客园的rss <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   "h ...

  4. PHP自动加载类—__autoload()和spl_autoload_register()

    test.php <?php function __autoload($class_name) { require_once $class_name . '.php'; } $obj = new ...

  5. PHP PSR-4 Autoloader 自动加载(中文版)

    引用:https://segmentfault.com/a/1190000002521658 Autoloader 关键词 "必须"("MUST")." ...

  6. jquery仿邮箱文本输入框自动加载邮箱后缀

    jquery仿邮箱文本输入框自动加载邮箱后缀 在像百度这样的网站注册时,你会看到输入邮箱会出现自动给用户输入补全主流邮箱.这种对于增加用户体验的小例子已司空见惯.正好看到人家写的这种js功能.还挺不错 ...

  7. Win8 x64 + Office Word 2013 x64 无法自动加载 Endnote X6 的解决方案

    此篇技术解决贴之前发布在PLOB上,阅读7700+,原文链接 https://www.plob.org/article/5932.html .最近新开了自己的CSDN博客,重发自己的原创作品. 问题描 ...

  8. php点击按钮加载控制器,php – Codeigniter 3自动加载控制器

    我在codeigniter中使用REST Server,使用的方法是在我的应用程序中使用所有控制器,我必须在开始时写下这一行: require APPPATH . '/libraries/REST_C ...

  9. php的_autoload函数实现自动加载类的使用

    本文章详细的以实例来介绍了关于php _autoload自动加载类的用法以及如何使用_autoload来减少程序上的include和require的调用哦. 在使用PHP的OO模式开发系统时,通常大家 ...

最新文章

  1. 使用JPA进行update操作时,报org.springframework.beans.factory.BeanCreationException: Error creating bean with
  2. 阶乘和matlab实现
  3. php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...
  4. 关于jQuery中.attr()和.prop()
  5. MFC六大核心机制之四:永久保存(串行化)
  6. 读取字符串中的数字和小数
  7. binary search(二分法)
  8. androidpn的学习研究(四)androidpn-client客户端几个类说明
  9. 空间参考---墨卡托投影、高斯-克吕格投影、UTM投影的异同
  10. 【机器学习概率统计】18 隐马尔科夫模型:明暗两条线
  11. 从零开始实现Unity光照模型_02_为Shader添加简单的多光源支持_技术美术基础学习记录
  12. jersey restful 测试_Jersey实现Restful服务
  13. 【通过】华为OD机试真题59:叠积木
  14. linux+中的su命令,Linux中如何使用SU命令(示例)
  15. 安卓6.0+通电自动开机
  16. 2021 谷歌游戏出海峰会精彩内容回放 | 跨界破圈 赢在未来
  17. 解决catkin_make时出现make[2]: *** No rule to make target ‘/usr/lib/libOpenNI2.so‘, needed by ‘*******‘。
  18. 字符串查找函数和错误信息报告函数
  19. ArcGIS制作矢量动图
  20. 微服务启动成功无法注册到服务注册中心

热门文章

  1. IDEA 修改项目名称
  2. Swagger注解-@ApiImplicitParams 和 @ApiImplicitParam
  3. Invalid bound statement (not found)错误的可能原因分析
  4. Android开发笔记(十七)GIF动画的实现GifAnimation
  5. 加拿大程序员趣闻系列 1/N
  6. 强一致、高可用、自动容灾能力背后,阿里X-Paxos的应用实践
  7. (寒假集训)Mooo Moo (完全背包)
  8. 南阳71(独木舟上的旅行)
  9. m2eclipse简单使用,创建Maven项目 ,运行mvn命令(转)
  10. 在Ubuntu下安装qq