Browsing all articles from 五月, 2009
27
9

自己表演的一个魔术 – 会爬的戒指..

Author Jessica     Category 心情杂谈     Tags

没有使用任何魔术特制道具

一个普通的橡皮筋..一个普通的戒指.

25
11

一道酷讯的笔试题…

Author Jessica     Category PHP     Tags

要求:输入一个英文方式的数字,输出中文方式的数字表达方式。

比如:

输入:12345

输出:一万二千三百四十五

下面是我的算法,本来想用explode的后来发现当separator 为空字符串(”"),explode() 将返回 FALSE。所以使用了sscanf,比较复杂.想不出更简单的来了..

  1. <?php  
  2. $a = 12345;  
  3. $units = array('''十''百''千''万''十''百''千''亿');  
  4. $num = array('零''一''二''三''四''五''六''七''八''九');  
  5. $b = array_reverse(sscanf($a, join(''array_fill(0, strlen($a)%10, '%1d'))));  
  6. foreach ($b as $k => $v) {  
  7.     $b[$k] = $num[$v];  
  8.     $new[] = $units[$k];  
  9.     $new[] = $b[$k];  
  10. }  
  11. echo join(''array_reverse($new)); 
19
4

仿开心QQ邮箱的INPUT组件..

Author Jessica     Category JavaScript     Tags

觉得很有意思..自己就模仿了一个..没有看他们的源码..只是按照自己的想法做的..

还不是十分完善..但是大体的样子出来了..:)

等以后慢慢完善吧..

演示地址:http://www.skiyo.cn/demo/input/

下载就没有了..右键看源码就可以了..:)

19
0

通过表单修改PHP配置文件..

Author Jessica     Category PHP     Tags

我上次写过一个缓存类..几乎就实现了这个功能..

但是看到PPC还有人问到..所以我就简单的举例例子..

原理还是var_export..使用这个的好处就是可以自动识别类型..并且数组也不怕:)..

演示地址:http://www.skiyo.cn/demo/setconfig/

详细的代码我就不贴了..

直接给出下载地址吧..

read more

15
5

介绍下不常用的函数 – sscanf

Author Jessica     Category PHP     Tags ,

也许你经常会使用sprintf..比如.

  1. $str = "%s刚才吃了%s";  
  2. echo sprintf($str'博主''大便');  
  3. //output 博主刚才吃了大便 

顾名思义..格式化输出..其实是跟printf延伸而来的..

但是还有个格式化输入..大家常用吗??

那就是sscanf..如果你还对他很少了解..那么我们今天来看几个例子.

如何读出一个日期的年份月份和日期??比如”2009年5月15日”

那么这时候我们使用sscanf来试下..

read more

14
6

我们来用面向对象的方式写程序吧..

Author Jessica     Category PHP     Tags

上次说了很多面向对象的思想..很多人也许思想是有了..但是无法落实到程序上..

为什么JSP不是面向对象的呢??因为我们知道..web编程这种特性注定了要面向过程的..

然而一些框架..还是完成了这个心愿..当今的一些框架都是利用网站统一入口来实现了所谓的面相对象的编程方式..无非就是判断哪个Action然后去执行这个Action中的方法而已..Punny也完成了这一点..

但是网站统一入口有他的好处..也会有他的弊病..

所以今天我们要完成的就是不利用网站统一入口来完成所谓的面相对象的编程..

其实实现也非常简单..无非也就是判断Action..指向方法而已..

我们需要做的就是做一个父类..所有的页面都需要继承自这个父类即可..

  1. <?php  
  2. /**  
  3.  * Action.class.php by Jessica  
  4.  *  
  5.  */ 
  6. class Action {  
  7.       
  8.     /**  
  9.      * 404 Action Not Found    
  10.      * You can rewrite it if you need!  
  11.      *  
  12.      */ 
  13.     public function notFound() {  
  14.         echo '404 Action Not Found!!';  
  15.     }  
  16.     /**  
  17.      * Start Action  
  18.      *   
  19.      * @access public  
  20.      *   
  21.      */ 
  22.     public final function run() {  
  23.         $do = $_GET['do'];  
  24.         $goto = emptyempty($do) ? 'doDefault' : 'do'.ucfirst(strtolower($do));  
  25.         /**  
  26.          * Must be "do" + Action;  
  27.          * The first letter MUST be upper case and others MUST be lower case!!!  
  28.          */ 
  29.         if (method_exists($this$goto)) {  
  30.             return $this->$goto();  
  31.         } else {  
  32.             return $this->notFound();  
  33.         }  
  34.     }  

我们需要做的.就是继承这个类好了..

PS:这次用了英文注释..顺便锻炼下英文..也许有些语法错误..Orz…

read more

9
5

在ubuntu下重新编译PHP…

Author Jessica     Category PHP     Tags , ,

上次说了怎么DIY PHP函数,好多人苦于不会重新编译PHP,其实非常简单。我们今天来学习下。
首先既然是ubuntu,我们就应该利用它的优点来部署lamp,什么优点?就是傻瓜式部署lamp。

sudo apt-get apache2 php5-mysql libapache2-mod-php5 mysql-server

要提示mysql的root密码。安装好后可以直接运行下http://127.0.0.1 就会出现 It works!
安装完成后你可能会问,为什么要安装PHP?我们不是要手动编译安装吗??
对,没错。但是为了更加简便。我这里用到了一个偷梁换柱的方法,因为你安装完上面的包以后ubuntu就给你设置好了。
所以我们只需要把PHP重新编译下,然后覆盖就可以了。

在php.net上下载了最新的5.2.9的源码后,比如我们解压到桌面上。
这时候需要进入PHP的目录。然后config配置一下,我们这里只带上最基本的参数。

./configure –prefix=/usr/local/php –with-apxs2=/usr/bin/apxs2

配置好后。再make就编译成功了

make

read more

6
5

DIY PHP函数之完善count()…

Author Jessica     Category PHP     Tags ,

记得有一道面试题是这样的..

  1. $str = 'This is a string!'
  2. echo count($str); 

很多人都以为输出的是17..但是现实不是这样的..输出的是1..

为什么会是这样呢??是不是PHP的BUG呢??

其实这是PHP故意这样设计的..(我估计是这样的..因为这个函数是在array.c中..也就是说是对于array的函数..)

知其然当然是不够的.我们需要知其所以然..所以我们非常有必要去看一看这个函数的源码..

为什么当是string类型的返回的就是1了..

以下就是count的函数原型..位于array.c中…

  1. PHP_FUNCTION(count) 
  2.     zval *array; 
  3.     long mode = COUNT_NORMAL; 
  4.      
  5.     if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE) 
  6.         return
  7.      
  8.     switch (Z_TYPE_P(array)) { 
  9.         case IS_NULL: 
  10.             RETURN_LONG(0); 
  11.             break
  12.         case IS_ARRAY: 
  13.             RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC)); 
  14.             break
  15.         case IS_OBJECT: { 
  16. #ifdef HAVE_SPL 
  17.             /* 如果实现了SPL的接口。就去调用起count方法 */ 
  18.             zval *retval; 
  19.  
  20.             if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) { 
  21.                 zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval); 
  22.                 if (retval) { 
  23.                     convert_to_long_ex(&retval); 
  24.                     RETVAL_LONG(Z_LVAL_P(retval)); 
  25.                     zval_ptr_dtor(&retval); 
  26.                 } 
  27.                 return
  28.             } 
  29. #endif 
  30.             /* if not we return the number of properties (not taking visibility into account) */ 
  31.             if (Z_OBJ_HT_P(array)->count_elements) { 
  32.                 RETVAL_LONG(1); 
  33.                 if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value) TSRMLS_CC)) { 
  34.                     return
  35.                 } 
  36.             } 
  37.         } 
  38.         //看到了吧,PHP只判断了array和object,其他的直接返回1了。 
  39.         default
  40.             RETURN_LONG(1); 
  41.             break
  42.     } 

请仔细看看上面的我写的注释..

原来在这个函数中..PHP只判断了array和object..因为PHP的原意是count本来是对于array来说的.strlen才是对于string来说的..

所以看到这里..我们是否可以DIY一下呢?让count支持string的函数呢??

read more

分类目录

最近文章

最近评论

文章索引模板

标签

.net AJAX button Comet CSS Discuz! DIV+CSS Flash Form Google HTML编辑器 IE8 Java JavaScript jQuery JSP md5 MySQLReback Oracle PHP php-fpm PNG Punny SkiyoTabs tab TagCloud Vista Web2.0 Windows7 上传 加密 变量 图标 本站原创 模板 模板引擎 源码 登录 短网址 石家庄 算法 编译 面向对象 魔术方法

链接表