当前位置:  编程技术>php
本页文章导读:
    ▪PHP的魔术方法与魔术常量      本节内容: PHP编程之魔术方法与魔术常量 PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀。 一,魔术方法: 1. __construct() .........
    ▪分享:php文件缓存类      本节内容: 一例php文件缓存类的代码 例子:   代码示例: <?php  /**  * 文件缓存类  * @author flynetcn  * @site wwww.  */  class FileCache  {      const CACHE_DIR = '/tmp/cache';      private.........
    ▪php实现post php curl模拟post传输数据的函数       本节内容:  php curl模拟post  代码:   代码示例:  <?php  /**  * php curl post  * site: www.  */ function curl_post($strUrl, $arrData=array(), $boolUseCookie=false)  {      $strData = array();      forea.........

[1]PHP的魔术方法与魔术常量
    来源: 互联网  发布时间: 2013-12-24

本节内容:
PHP编程之魔术方法与魔术常量

PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀。

一,魔术方法:

1. __construct()
类的默认构造方法,如果__construct()和与类同名的方法共同出现时,默认调用__construct()而不是同类名方法。一般情况下用户自定义构造方法也会使用__construct()。

2. __destruct()
类的析构函数,当该对象的所有引用都被删除,或者对象被显式销毁时执行。

3. __get($name)
用$object->a的方式读取对象的属性时,如果属性a存在且是public型,那么直接返回该属性的值;如果属性a不存在或者是protected/private这样的不可直接访问的类型,就会调用__get($name)方法并以返回值为准。一般可以使用该方法使外部可限制性地访问内部属性,或者完成类似java中的反射操作。

4. __set($name, $value)
与__get($name)类似,用$object->a = 17的方式给属性赋值时,如果属性a存在且是public型,那么直接给属性a赋值皆可;如果属性a不存在或者是protected/private型,就会调用__set($name, $value)方法。

5. __call($name, $arguments) / __callStatic($name, $arguments)
当调用不存在或者不可访问的方法时,会调用__call($name, $arguments)方法。而当在静态方法中调用不存在或者不可访问的方法时,会调用__callStatic($name, $arguments)方法。

6. __toString()
当打印对象时会被直接调用。如echo $object;

7. __clone()
当对象被拷贝时直接调用。如$a = new Action(); $a = $object;

8. __isset()($name) / __unset($name)
对不存在或者不可访问的属性使用isset()或者empty()时,__isset()会被调用;当unset一个不存在或者不可访问的属性时,__unset()会被调用,否则直接unset该属性皆可。

9. __set_state()
用var_export()输出一个对象时,__set_state()会被调用,输出内容以该魔术方法的返回值为准。
注:var_export()和var_dump()类似,只是var_export()输出的内容符合php语法。

注意,使用方法:
 

代码示例:

<?php
$test = new Test();
$b = var_export($test, true);
var_dump($b);

class Test {

    public $a;
    public static function __set_state($array) {
        $ab = new Test();
        $ab->a = 10;
        return $ab;
    }
}

10. __autoload($name)
实例化一个对象时,如果对应的类不存在,则该方法被调用。注意:该方法是全局函数,参数是类的名称。

11. __sleep() / __wakup()
略。

二,魔术常量:

PHP的魔术常量是通过扩展库定义的,比如以下几种魔术常量的值就会随着它们在代码中的位置改变而改变:

__LINE__ 该php文件中的当前行号

__FILE__  文件的完整路径和文件名。如果用在被包含文件中,如果用在被包含文件中,则返回被包含的文件名。__FILE__总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

__DIR__文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。

__FUNCTION__ 函数名称。自php5起本常量返回该函数被定义时的名字(区分大小写)。php4时总为小写字母。

__CLASS__类的名称。php5区分大小写,php4总为小写字母。

__METHOD__类的方法名,区分大小写,返回形式:class::function。

__NAMESPACE__ 当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的。


    
[2]分享:php文件缓存类
    来源: 互联网  发布时间: 2013-12-24

本节内容:
一例php文件缓存类的代码

例子:
 

代码示例:
<?php 
/**
 * 文件缓存类
 * @author flynetcn
 * @site wwww.
 */ 
class FileCache 

    const CACHE_DIR = '/tmp/cache'; 
    private $dir; 
    private $expire = 300; 
 
    /**
     * @param $strDir 缓存子目录(方便清cache)
     */ 
    function __construct($strDir='') 
    { 
        if ($strDir) { 
            $this->dir = self::CACHE_DIR.'/'.$strDir; 
        } 
    } 
 
    private function getFileName($strKey) 
    { 
        return $this->dir.'/'.$strKey; 
    } 
 
    public function setExpire($intSecondNum) 
    { 
        if ($intSecondNum<10 || !is_int($intSecondNum)) { 
            return false; 
        } 
        $this->expire = $intSecondNum; 
        return true; 
    } 
 
    public function getExpire() 
    { 
        return $this->expire; 
    } 
 
    public function get($strKey) 
    { 
        $strFileName = $this->getFileName($strKey); 
        if (!@file_exists($strFileName)) { 
            return false; 
        } 
        if (filemtime($strFileName) < (time()-$this->expire)) { 
            return false; 
        } 
        $intFileSize = filesize($strFileName); 
        if ($intFileSize == 0) { 
            return false; 
        } 
        if (!$fp = @fopen($strFileName, 'rb')) { 
            return false; 
        } 
        flock($fp, LOCK_SH); 
        $cacheData = unserialize(fread($fp, $intFileSize)); 
        flock($fp, LOCK_UN); 
        fclose($fp); 
        return $cacheData; 
    } 
 
    public function set($strKey, $cacheData) 
    { 
        if (!is_dir($this->dir)) { 
            if (!@mkdir($this->dir, 0755, true)) { 
                trigger_error("mkdir({$this->dir}, 0755, true) failed", E_USER_ERROR); 
                return false; 
            } 
        } 
        $strFileName = $this->getFileName($strKey); 
        if (@file_exists($strFileName)) { 
            $intMtime = filemtime($strFileName); 
        } else { 
            $intMtime = 0; 
        } 
        if (!$fp = fopen($strFileName,'wb')) { 
            return false; 
        } 
        if (!flock($fp, LOCK_EX+LOCK_NB)) { 
            fclose($fp); 
            return false; 
        } 
        if (time() - $intMtime < 1) { 
            flock($fp, LOCK_UN); 
            fclose($fp); 
            return false; 
        } 
        fseek($fp, 0); 
        ftruncate($fp, 0); 
        fwrite($fp, serialize($cacheData)); 
        flock($fp, LOCK_UN); 
        fclose($fp); 
        @chmod($strFileName, 0755); 
        return true; 
    } 

    
[3]php实现post php curl模拟post传输数据的函数
    来源: 互联网  发布时间: 2013-12-24

 本节内容:
 php curl模拟post

 代码:
 

代码示例:
 <?php
 /**
 * php curl post
 * site: www.
 */
function curl_post($strUrl, $arrData=array(), $boolUseCookie=false) 

    $strData = array(); 
    foreach ($arrData as $k => $v) { 
        $strData[] = "$k=$v"; 
    } 
    $strData = $strData ? implode('&', $strData) : ''; 
    $ch = curl_init($strUrl); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $strData); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    if ($boolUseCookie && is_array($_COOKIE) && count($_COOKIE) > 0) { 
        $cookie_str = ''; 
        foreach($_COOKIE as $key => $value) { 
            $cookie_str .= "$key=$value; "; 
        } 
        curl_setopt($ch, CURLOPT_COOKIE, $cookie_str); 
    } 
    $response = curl_exec($ch); 
    if (curl_errno($ch) != 0) { 
        //echo curl_error($ch); 
        return false; 
    } 
    curl_close($ch); 
    return $response; 


 

您可能感兴趣的文章:
php curl模块的用法举例
PHP添加CURL扩展库的二种方法
php curl超时设置详解
php CURL模拟cookie登录的代码
PHP CURL获取cookies模拟登录的方法介绍
php curl提交GET,POST,Cookie的简单实例
php curl上传文件的简单例子
php中开启curl扩展的方法详解
php curl post的简单示例
php curl 学习总结


    
最新技术文章:
▪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小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


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

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

浙ICP备11055608号-3