当前位置:  编程技术>php
本页文章导读:
    ▪php _autoload自动加载类与机制分析       在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可 test.class.php 代码如下: <?php class abc{ function __construct() { echo 'www.hzhuti.com; } } ?> load.php 代码如下 代码如.........
    ▪php 文本文件的读取效率       首页大概3KB,是在本地测试的 代码如下: file_get_contents('shadow.xml'); 耗时 0.0003 秒 代码如下: $indexFile = fopen('shadow.xml', 'r');while ( !feof($indexFile)) fgetc( $indexFile); 耗时 0.026 秒 代码如下: $indexFil.........
    ▪php+iframe实现隐藏无刷新上传文件       首先ajax不能上传文件,这误导了我有段时间,今晚睡不着就照着说明做了个无刷新上传文件 其实原理很简单 代码如下: <form enctype="multipart/form-data" method="POST" target="upload" action="http://localh.........

[1]php _autoload自动加载类与机制分析
    来源: 互联网  发布时间: 2013-11-30
在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可
test.class.php
代码如下:

<?php
class abc{
function __construct()
{
echo 'www.hzhuti.com;
}
}
?>

load.php
代码如下
代码如下:

<?php
class LOAD
{
static function loadClass($class_name)
{
$filename = $class_name.".class.php";
if (is_file($filename)) return include_once $filename;
}
}
/**
* 设置对象的自动载入
* spl_autoload_register — Register given function as __autoload() implementation
*/
spl_autoload_register(array('LOAD', 'loadClass'));
$a = new Test();//实现自动加载,很多框架就用这种方法自动加载类
?>

__autoload()
在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就需要通过 include 把这个文件引入。不过有的时候,在文件众多的项目中,要一一将所需类的文件都 include 进来,一个很大的烦恼是不得不在每个类文件开头写一个长长的包含文件的列表。我们能不能在用到什么类的时候,再把这个类所在的 php 文件导入呢?
为此,PHP 提供了 __autoload() 方法,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
__autoload() 方法接收的一个参数,就是欲加载的类的类名,所以这时候需要类名与文件名对应,如 Person.php ,对应的类名就是 Pserson 。
下面看个完整的实例
代码如下:

class ClassA{
public function __construct(){
echo “ClassA load success!”;
}
}
//定义一个类ClassA,文件名为ClassA.php
class ClassA{
public function __construct(){
echo “ClassA load success!”;
}
}
class ClassB extends ClassA {
public function __construct(){
//parent::__construct();
echo “ClassB load success!”;
}
}
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
class ClassB extends ClassA {
public function __construct(){
//parent::__construct();
echo “ClassB load success!”;
}
}

定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
代码如下:

function __autoload($classname){
$classpath=”./”.$classname.'.php';
if(file_exists($classpath)){
require_once($classpath);
}
else{
echo ‘class file'.$classpath.'not found!';
}
}
$newobj = new ClassA();
$newobj = new ClassB();

    
[2]php 文本文件的读取效率
    来源: 互联网  发布时间: 2013-11-30
首页大概3KB,是在本地测试的

代码如下:

file_get_contents('shadow.xml');

耗时 0.0003 秒
代码如下:

$indexFile = fopen('shadow.xml', 'r');while ( !feof($indexFile)) fgetc( $indexFile);

耗时 0.026 秒
代码如下:

$indexFile = fopen('shadow.xml', 'r');fread($indexFile, 10000);

耗时 0.0003秒
相差将近 100 倍!! 还真是出乎意料

我估摸着时间怕都牺牲在while循环上还是怎的

    
[3]php+iframe实现隐藏无刷新上传文件
    来源: 互联网  发布时间: 2013-11-30
首先ajax不能上传文件,这误导了我有段时间,今晚睡不着就照着说明做了个无刷新上传文件

其实原理很简单
代码如下:

<form enctype="multipart/form-data" method="POST" target="upload" action="http://localhost/class.upload.php" >
<input type="file" name="uploadfile" />
<input type="submit" />
</form>
<iframe name="upload" ></iframe>

和一般的<form>标签相比多了一个target属性罢了,用于指定标签页在哪里打开以及提交数据。

如果没有设置该属性,就会像平常一样在本页重定向打开action中的url。

而如果设置为iframe的name值,即"upload"的话,就会在该iframe内打开,因为CSS设置为隐藏,因而不会有任何动静。若将display:none去掉,还会看到服务器的返回信息。

另外贴一下自己组织的类。
代码如下:

class upload
{
public $_file;

public function __construct( $name =null)
{
if(is_null($name) || !isset($_FILES[$name]))
$name = key($_FILES);

if(!isset($_FILES[$name]))
throw new Exception("并没有文件上传");

$this->_file = $_FILES[$name];

if(!is_uploaded_file($this->_file['tmp_name']))
throw new Exception("异常情况");
if($this->_file['error'] !== 0)
throw new Exception("错误代码:".$this->_file['error']);
}
public function moveTo( $new_dir)
{
$real_dir = $this->checkDir($new_dir);
return move_uploaded_file($this->_file['tmp_name'], $real_dir.'/'.$this->_file['name']);
}
private function checkDir($dir)
{
$real_dir = realpath($dir);
if($real_dir === false)
throw new Exception("给定目录{$dir}不存在");
if(!is_writable($real_dir))
throw new Exception("给定目录{$dir}不可写");
return $real_dir;
}}

调用示例:
代码如下:

$inputName = 'uploadfile';
// 即<input type=“file" name="uploadfile" /> 中的name值,不填也行
$upload = new upload($inputName);
$new_dir = "/www"; // 将文件移动到的路径
$upload->moveTo($new_dir);

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
操作系统 iis7站长之家
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3