手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

PHP反射API--利用反射技术实现的插件系统架构

纯COPY,没仔细看。。。。【先申明,我COPY对这段代码,主要是看他reflectionClass的应用,并非关注插件的应用。。。】

有爱好的人,可以学习一下。。

http://www.e897.com/Article/wlbc/php/200908/5377.html
  1. /** 
  2. * @name  PHP反射API--利用反射技术实现的插件系统架构 
  3. * @author :PHPCQ.COM 
  4. */  
  5. interface Iplugin{  
  6.         public static function getName();  
  7. }  
  8. function findPlugins(){  
  9.         $plugins = array();  
  10.         foreach (get_declared_classes() as $class){  
  11.                 $reflectionClass = new ReflectionClass($class);  
  12.                 if ($reflectionClass->implementsInterface('Iplugin')) {  
  13.                         $plugins[] = $reflectionClass;  
  14.                 }  
  15.         }  
  16.         return $plugins;  
  17. }  
  18. function computeMenu(){  
  19.         $menu = array();  
  20.         foreach (findPlugins() as $plugin){  
  21.                 if ($plugin->hasMethod('getMenuItems')) {  
  22.                         $reflectionMethod = $plugin->getMethod('getMenuItems');  
  23.                         if ($reflectionMethod->isStatic()) {  
  24.                                 $items = $reflectionMethod->invoke(null);  
  25.                         } else {  
  26.                                 $pluginInstance = $plugin->newInstance();  
  27.                                 $items = $reflectionMethod->invoke($pluginInstance);  
  28.                         }  
  29.                         $menu = array_merge($menu,$items);  
  30.                 }  
  31.         }  
  32.         return $menu;  
  33. }  
  34. function computeArticles(){  
  35.         $articles = array();  
  36.         foreach (findPlugins() as $plugin){  
  37.                 if ($plugin->hasMethod('getArticles')) {  
  38.                         $reflectionMethod = $plugin->getMethod('getArticles');  
  39.                         if ($reflectionMethod->isStatic()) {  
  40.                                 $items = $reflectionMethod->invoke(null);  
  41.                         } else {  
  42.                                 $pluginInstance = $plugin->newInstance();  
  43.                                 $items = $reflectionMethod->invoke($pluginInstance);  
  44.                         }  
  45.                         $articles = array_merge($articles,$items);  
  46.                 }  
  47.         }  
  48.         return $articles;  
  49. }  
  50. require_once('plugin.php');  
  51. $menu = computeMenu();  
  52. $articles  = computeArticles();  
  53. print_r($menu);  
  54. print_r($articles);  
  55.   
  56.   
  57. //plugin.php 代码如下  
  58. <?php  
  59. class MycoolPugin implements Iplugin {  
  60.         public static function getName(){  
  61.                 return 'MycoolPlugin';  
  62.         }  
  63.         public static function getMenuItems(){  
  64.                 return array(array('description'=>'MycoolPlugin','link'=>'/MyCoolPlugin'));  
  65.         }  
  66.         public static function getArticles(){  
  67.                 return array(array('path'=>'/MycoolPlugin','title'=>'This is a really cool article','text'=>xxxxxxxxx));  
  68.         }  
  69. }  

Tags: 反射, 插件

IE6, IE7, IE8 CSS 兼容速查表

这个玩意,可以做网页的人必看手册啊。。。虽然我没有看过,但我还是留了一个备份。天知道我什么时候就会用到这玩意?

新闻来源:tutorialfeed.blogspot.com
现代 Web 设计与开发越来越看重浏览器兼容问题,IE 每个新版本的推出,都在 CSS 的标准化方面前进一大步,同时,也就不可避免地在 IE 的各个主要版本之间产生兼容问题,尽管 IE8 推出已有时日,使用 IE6的用户仍然相当可观。本文以速查手册的形式介绍 CSS (2.1 和 3)在 IE6,7,8 三个版本之间的兼容情况。

大小: 41.49 K
尺寸: 480 x 376
浏览: 1444 次
点击打开新窗口浏览全图

这套速查手册可以打印成 A3 尺寸,共2页,以下是各种不同格式下载:

本文来源:http://tutorialfeed.blogspot.com/2009/10/visual-cheat-sheet-css-compatiblity.html
翻译整理:COMSHARP CMS 企业网站内容管理系统官方网站

【由于以上内容下载需要google帐号,因此我这里做了本地备份,可以给那些没有google帐号的朋友提供方便】

1、两张GIF文件 

大小: 119.64 K
尺寸: 204 x 376
浏览: 1530 次
点击打开新窗口浏览全图

大小: 131.22 K
尺寸: 200 x 376
浏览: 1517 次
点击打开新窗口浏览全图

2、两个PDF文件

cheatsheet-page1.pdf

cheatsheet-page2.pdf

高春辉的DAL

提起高春辉,恐怕更多的人想到的是手机之家。其实,还有一款PHP界的软件是大家所熟知的,那就是ecshop。当然现在的ecshop已经不是高春辉的了。几经转手,现在ecshop已经是shopex的旗下产品了。

4月份的时候,高春辉提出了新的架构,并整理出了一份PPT与大家共享,与“手机之家新系统介绍及架构分享”有关,过了几天,他把DAL方面的特点整理了一下,还是有关 DAL~,认为有一些特色:

XML/HTML代码
  1. 我也觉得其实这个 DAL 的最核心功能就是如何自动缓存和清理缓存了。因为不让程序员缓存和清理,就的是程序自己来管理缓存和清理缓存,总得清理嘛。不过这个还是保密一下吧。起码不是某些人想的只能缓存单条数据,也不是某些人想的清理是按照单条方式的清理。当然另外的一个核心功能就是分库分表的自动和透明化,这个功能有很多软件都实现了,就不多说了。  

六个月过去了,高春辉终于放出了DAL 近期情况~,如果他愿意,估计可能会开源。如果东西很新鲜,那么极有可能引起一场革命。象他的ecshop一样,又或者象当年的ruby的 active record 。

真正的发布会带来什么呢?我也很期待

Tags: dal, 高春辉, 手机之家

phpQuery

想分析网页?不会写正则?这。。。一切都不是问题

在以前是不可想象的。但如今google的项目里有这个phpQuery,它可以让一切变得可能。。。

phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library.

Library is written in PHP5 and provides additional Command Line Interface (CLI).

如果你使用过jQuery,你会发现这一切是如此的相象。

PHP代码
  1. <?php  
  2.   
  3. include_once'./phpQuery.php' );  
  4.   
  5. $html = new phpQueryDocumentFile('xxx.html');  
  6. $title = $html->find('title')->text();  
  7.   
  8. echo $title;  
以上内容是取得网页的 title。多方便啊。。。

如果是取得某个class的内容呢?

PHP代码
  1. <?php  
  2.   
  3. //...include   
  4. //...new phpQueryDocument  
  5.   
  6. $html->find('div.test eq(1)')->html();  
  7. //表示取得div的class为test的,第一个匹配的元素中html内容  
呵呵,快去:http://code.google.com/p/phpquery/下载吧

Tags: phpquery

关于PHP的定界符:heredoc syntax

定界符这个东西功能很强大,特别是在引用多行HTML代码的时候,方便了PHP的开发者,但其实他的使用很妖异【没装过PHP5.3,所以不知道新的有没有变化】

1、heredoc syntax 里面只能是文字,凡是涉及到的变量都会被解析,不想被解析?美元前加反斜杠吧。。解析类中的变量?使用大括号吧。。。

2、不要妄想在定界符内赋值、计算等,如果是变量的相乘,请在外面解析完了放进来。。。

3、大括号要注意着使用,无论如何,大括号内不要同时出现多个变量【多个变量只应该是{$a->$b->$c}这种】

4、定界符标志后面不能有任何空格,如 <<<EOT,EOT;,这两个符号后都不能有任何字符,EOT;就是占一行,谁也不能抢它

PHP代码
  1. <?php  
  2. print <<<EOT  //如果这个后面有空格,报错。。。
  3. haha  
  4. EOT;  //如果这个后面有空格,报错【如果没有空格,就这样文件直接结束,同样报错,请在EOT;后面敲个回车吧】

就想到这么多。以后想到再写

顺便说明一下,PHP的文件还是有规范的。。

例如

1、空文件,一般代码为<?php,如果就这样写,肯定报错,最少在<?php后面得加一个空格

2、文件结尾,上面说的定界符,就是一例,如果文件正好是EOT;结尾,后面又没有 ?> ,文件绝对报错,所以必须要在EOT;后再敲一个回车。。。。

妖啊。。实在是妖啊。。

Tags: 定界符, heredoc