PHP魔术方法中 __set() __get()

先看看官方文档的解释
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
究竟用中文怎么翻译呢?   inaccessible :n. 难达到;难接近;无法理解。
有代码有真相:
<?php
error_reporting(E_ALL);
class stu{
	private $a;
	private $b = 0;
	public $c;
	public $d = 0;
	
	//这里的 private 可以用 protected public 替代
	private function __get($name) {
		return 123;
	}
	
	//这里的 private 也可以用 protected public 替代
	private function __set($name, $value) {
		echo "This is set function";
	}
}

$s = new stu();

var_dump($s->a);  //output: 123
var_dump($s->b);  //output: 123
var_dump($s->c);  //output: null
var_dump($s->d);  //output: 0
var_dump($s->e);  //output: 123

$s->a = 3;	//output: This is set function
$s->c = 3;  //no output
$s->f = 3;  //output: This is set function
?>
结果:
如果没有__get方法,执行 var_dump($s->a)  var_dump($s->b) 会有致命的错误
如果没有__get方法,执行 var_dump($s->e) 会有一个notice,提示没有定义属性 $e
总结:
1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用
2. 向一个难以访问的属性赋值的时候 __set() 方法被调用
3. 难以访问包括:(1)私有属性,(2)没有初始化的属性
4. __isset() __unset() 也类似
11
Mar 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS 4 Comments

使用mysql 命令行导入.sql 文件后中文出现乱码

以下是对UTF8编码的注意事项:
1. 检查  .sql 文件的编码格式,需要是 UTF8
2. 检查这些SQL语句的写法
ENGINE=MyISAM AUTO_INCREMENT=57 DEFAULT CHARSET=utf8;
要保证 CHARSET=utf8;
3.执行命令行的时候在最后指定编码
mysql -uroot -p gzmama_app < d:\Doc\gzmama_app.sql -f --default-character-set=utf8
记住这3条军规,可以在正常情况下保证不会出现乱码。其他编码格式也是同样的道理,只要把以上的 utf8 全部替换为对于的编码即可。
27
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

ThinkPHP U函数最经典的写法

第一种:

<ul class="Rtext">
     <volist name="list" id="vo">
                 <li>
                   <a href='{:U("Index/showContent/id/$vo[id]")}' title="{$vo.title}">
                  <span class="text">{$vo.title|substr_chinese=###,0,35}</span>{$vo.post_time|date='Y-m-d',###}</a>
                 </li>
     </volist>
</ul>

单引号与双引号都不能错,必须一模一样。是不是值得收藏啊! 

第二种(标准写法):建议使用

('User/edit', array('id'=>$vo['id'])) 
27
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

shell之输入参数

在 shell 脚本中如何得到一些程序外部的变量呢?通过输入参数可以实现这个步骤,如下:
./test.sh -f config.conf -v --prefix=/home

这是随便写的一个示例,没有任何实际意义。

 test.sh 中通过什么方式获取到 config.conf   /home 这些参数,然后做不同的处理呢?

$0 : ./test.sh,即命令本身,相当于C/C++中的argv[0]
$1 : -f,第一个参数.
$2 : config.conf
$3, $4 ... :类推。
$# : 参数的个数,不包括命令本身,上例中$#为4.
$@ :参数本身的列表,也不包括命令本身,如上例为 -f config.conf -v --prefix=/home
$* :和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组。
可以用下面的这个程序来详细看看 $* $@ 的值:
#!/bin/bash

# 输出 $*
for arg in "$*"
do
    echo $arg
done

# 输出 $@
for arg in "$@"
do
    echo $arg
done
更多内容可参考:Bash Shell中命令行选项/参数处理


18
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Linux 常用小命令

1. find(在指定目录下搜索指定文件名的文件)

##在bin目录下查找名为insmanyou的文件##
[liuweifeng@mydev ~]$ find ./bin/  -name insmanyou 

2. groups (查看当前用户的用户组)

[liuweifeng@mydev ~]$ groups

3. su (切换当前登录用户)

[liuweifeng@mydev ~]$ su root

4. sudo(执行root有权限执行的命令)

[liuweifeng@mydev ~]$ sudo svn info

阅读剩余部分...

18
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

抓取数据出现MySQL server has gone away

在抓取数据的时候总是提示:MySQL server has gone away, 在这样的情况下正是由于某两条SQL查询之间隔离的时间过长,导致该连接自动断开。 解决方案:在打开链接的时候如下多加一个参数

mysql_connect($dbhost, $dbuser, $dbpw, false, MYSQL_CLIENT_INTERACTIVE)

然后接着执行这样的query:

mysql_query("set interactive_timeout=24*3600");

这样的话,就不会出现mysql server has gone away 了。
为什么呢? 看看官方手册里的说明
MYSQL_CLIENT_COMPRESS 使用压缩的通讯协议
MYSQL_CLIENT_IGNORE_SPACE 允许在函数名后留空格位
MYSQL_CLIENT_INTERACTIVE 允许设置断开连接之前所空闲等候的 interactive_timeout 时间(代替 wait_timeout)。
MYSQL_CLIENT_SSL 使用 SSL 加密。本标志仅在 MySQL 客户端库版本为 4.x 或更高版本时可用。在 PHP 4 和 Windows 版的 PHP 5 安装包中绑定的都是 3.23.x。

16
Mar 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

PHP 连接 Access 数据库

PHP连接好多数据库哦,access也可以的

原文地址:http://superstar888.wf.blog.163.com.......

27
Feb 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

无限极分类中最经典的代码(函数)

第一种形式(最新版本)推荐使用:
<?php
function d($arr,$pid,$s) {
  static $r_arr=array();
  static $n = 0;
        $s=$s."&nbsp;&nbsp;&nbsp;";
        for($i=0;$i<count($arr);$i++){
            if($arr[$i]['parentid']==$pid){
                $r_arr[$n]['catname'] = $s.'|-'.$arr[$i]['catname'];
                $r_arr[$n]['catid'] = $arr[$i]['catid'];
    $n++;
                for($j=0;$j<count($arr);$j++){
                    if($arr[$i]['catid']==$arr[$j]['parentid']){
                        $r_arr[$n]['catname'] = $s."&nbsp;&nbsp;&nbsp;|-".$arr[$j]['catname'];
      $r_arr[$n]['catid'] = $arr[$j]['catid'];
      $n++;
                        d($arr,$arr[$j]['catid'],$s."&nbsp;&nbsp;&nbsp;");
                    }
                }
            }


        }
  return $r_arr;
    }
?>
第二种形式(原始版本):
<?php
header("Content-Type:text/html;charset=utf-8");
function d($arr,$pid,$s) {
        $s=$s."&nbsp;&nbsp;&nbsp;";
        for($i=0;$i<count($arr);$i++){
            if($arr[$i][2]==$pid){
                echo $s.$arr[$i][1]."<br>";


                for($j=0;$j<count($arr);$j++){
                    if($arr[$i][0]==$arr[$j][2]){
                        echo $s."&nbsp;&nbsp;&nbsp;".$arr[$j][1]."<br>";
                        d($arr,$arr[$j][0],$s."&nbsp;&nbsp;&nbsp;");
                    }
                }
            }
        }
    }
    $arr1=array('a1','根目录1','0','1');
    $arr2=array('b1','根目录2','0','1');
    $arr3=array('a2','一级目录','a1','2');
    $arr4=array('b2','一级目录','b1','2');
    $arr5=array('a3','二级目录','a2','3');
    $arr6=array('b3','二级目录','b2','3');
    $arr7=array('a4','三级目录','a3','4');
    $arr=array($arr1,$arr2,$arr3,$arr4,$arr5,$arr6,$arr7);
    d($arr,'0'," ");
?>
27
Feb 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

php 遍历目录以及子目录

源码如下:
<?php 
$dir = "c:/wamp/www/test/";  //目录名称必须是这种格式
$space="";
function fun1($dir,$space="") {
    if(is_dir($dir) && $handle = opendir($dir)){
        $space .= "&nbsp;&nbsp;&nbsp;&nbsp;";
        while(false!== ($file = readdir($handle))){
            if($file=="." || $file=="..") continue;
            if(is_dir($dir.$file.'/')){
                echo "$space|-$file<br>";
                fun1($dir.$file.'/',$space);
            }else
            echo "$space|-$file<br>";
        }
        closedir($handle);
    }else{
        echo "This have a error!";
    }
}
fun1($dir);
?>
遍历效果如下:
 |-1.php
    |-2.php
    |-2010-05-22_101859.jpg
    |-321.html
    |-ci
        |-.htaccess
        |-index.php
        |-system
27
Feb 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

本地apache虚拟主机的配置

第一步:在 C:\WINDOWS\system32\drivers\etc 下找到 hosts  文件 ,打开并且在最后加上
127.0.0.1          localhost
127.0.0.1          uc.521-wf.com
127.0.0.1          uch.521-wf.com
第二步:在apache 的配置文件 httpd.conf 的最后加上如下的代码:
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@521-wf.com
    DocumentRoot c:/wamp/www/
    ServerName localhost
</VirtualHost>

<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@521-wf.com
    DocumentRoot c:/wamp/www/uc/
    ServerName uc.521-wf.com
</VirtualHost>

<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@521-wf.com
    DocumentRoot c:/wamp/www/uch/
    ServerName uch.521-wf.com
</VirtualHost>
但是这是核心的代码,不是固定的写法:
     ServerAdmin   你的邮件地址(不过可以随便写,这也只不过是虚拟环境而已)
      DocumentRoot  这是你项目的路径
      ServerName    这是你的虚拟域名
有时候你把上面的127.0.0.1 换为 * 也可以。但是有时候不行。我建议还是加上。
我习惯于使用 wamp  所以我并没有加在配置文件的最后面,而是加在了以下两行代码之前:
Include "c:/wamp/apache2/conf/alias/phpmyadmin.conf"
Include "c:/wamp/apache2/conf/alias/sqlitemanager.conf"
当然如果你的操作系统装在了d盘,或者是其他盘,那就看着办吧! 这个配置我在学校里面配置我好多次,不能说倒背如流,但是可以说是滚光烂熟了吧。但是到了公司,两个多月不用了,突然想装一下uchome ,配置了半天,老是出错 。所以 还是写在这儿,以防以后再忘了。  <<<<<<<<<<<<<<<<<<<<<<<<<<补充,还可以使用以下这种方式,更安全
<VirtualHost *:80>
    DocumentRoot "D:/wamp/www/framework/webroot"
    ServerName star
    #ServerAlias *.shop.com.cn
    ErrorLog "logs/starland.ifensi-error.log"
    CustomLog "logs/make.openqee.com.cn.log" common  
    <Directory "D:/wamp/www/framework">
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    allow from all
    DirectoryIndex index.html index.php
    </Directory>
</VirtualHost>
24
Feb 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS 2 Comments