sam 的个人资料>>> 這也將會過去 <<<照片日志列表 工具 帮助
1月22日

好用的工具 Web Developer (Firefox Addone)

Web Developer 

https://addons.mozilla.org/zh-TW/firefox/addon/60

 

[CSS/Edit Css]

可以修改CSS,直接看到效果
可以用在調校線上網頁的外觀時,然後把修改過的CSS複製到真正的CSS

[Miscellaneous/Display Ruler]
 
用來測量尺寸大小和位置
 
[Outline]
 
1月2日

在php上實做動態代理(Dynamic Proxy)的機制

參考這兩篇

在php上實做動態代理(Dynamic Proxy)的機制

單純展現實做原理
請另行整理擺放架構
 
另外可以參考Java的一些概念做變種
<<深入了解Java ClassLoader、Bytecode 、ASM、cglib>>
可以看 cglib  那一段
 
Java下的框架编程(5)--cglib的应用
AOP編程入門--Java篇
前面又加了Factory包起來
 
程式碼:
================================================================================================
<?php
 /*
  InvocationHandler.php
 */
 require_once('InvocationHandler.php');
class Proxy {
 
 public $h;
 public $delegate;
 public $enumDirect;
 static function newInstance($delegate, InvocationHandler $h, array $enumDirect=array())
 {
  $rtn = new Proxy();
  $rtn->h = $h;
  $rtn->delegate = $delegate;
  $rtn->enumDirect = $enumDirect;
  return $rtn;
 }
 
 function __call($name, $args)
 {
  if(in_array($name, $this->enumDirect)) {
   call_user_func_array(array($this->delegate, $name), $args);
  } else {
   $this->h->invoke($this, $name, $args);
  }
 }
}
?>
================================================================================================
<?php
 /*
  Proxy.php
 */
 require_once('InvocationHandler.php');
class Proxy {
 
 public $h;
 public $delegate;
 public $enumDirect;
 static function newInstance($delegate, InvocationHandler $h, array $enumDirect=array())
 {
  $rtn = new Proxy();
  $rtn->h = $h;
  $rtn->delegate = $delegate;
  $rtn->enumDirect = $enumDirect;
  return $rtn;
 }
 
 function __call($name, $args)
 {
  if(in_array($name, $this->enumDirect)) {
   call_user_func_array(array($this->delegate, $name), $args);
  } else {
   $this->h->invoke($this, $name, $args);
  }
 }
}
?>
================================================================================================
<?php
/*
test.php
*/
 require_once 'InvocationHandler.php';
 require_once 'Proxy.php';
class Speaker implements ISpeaker {
  public function say($str)
  {
   echo "==$str==<br />\r\n";
  }  
}
class Loger
{
 public function log($str)
 {
  echo("log:$str<br>\r\n");
 }
}
class LogHandler extends InvocationHandler {
 protected $loger;
 
 function __construct()
 {
  $this->loger = new Loger();
 }
 
 public function bind($delegate)
 {
  //return Proxy::newInstance($delegate, $this, array('say'));
  
  return Proxy::newInstance($delegate, $this);
 }
 
 public function invoke(Proxy $proxy, $name, array $args)
 {
  $this->loger->log("preSay");
  if(method_exists($proxy->delegate, $name)) {
   ////[deprecated]
   ////http://www.php.net/manual/en/function.call-user-method.php   
   ////call_user_method($name, $this->delegate, $args);
   
   ////[deprecated]
   ////http://tw2.php.net/manual/en/function.call-user-method-array.php
   ////call_user_method_array($name, $this->delegate, $args);
   
   
   
   //http://tw2.php.net/manual/en/function.call-user-func-array.php
   call_user_func_array(array($proxy->delegate, $name), $args);
  }
  $this->loger->log("postSay");
 }
}
 
 function __main__()
 {
  $logHandler = new LogHandler();
  $speakerProxy = $logHandler->bind(new Speaker());
  $speakerProxy->say("Hello");  
 }
 __main__();
?>
 

初探php namespace 反射想法

 

php namespace  
http://www.php.net/language.namespaces


基本上不太喜歡寫評論的文章,
若真的要寫,基本上我覺得要提出創造性的想法,
才值得一寫,
以下沒啥創造性的想法,只是單純反射的想法,
寫寫,練習文筆和拋出腦中縈繞的思緒(創造性? 資源:垃圾)
雖然我知道文筆是不會進步,因為我是想到啥就寫啥,沒啥壓力, :p


會有這樣反射性的想法
是因為php的namespace採用"\"這個符號


剛看到時才在想,以前看到,忘了是那個IDE(是不是GodeGear還是vs,沒深究,懶得去查證)
的PHP已經有引進 namespace 是用":::" , 
哇,為了要寫namespace要用到三個冒號,好不容易習慣了property用"->",static用"::",
結果好拉,現在php官方用"\"。


基本上這個符號沒啥罪過,
換個觀點看其實還蠻適合的,
只是,我喜歡他當字串中的脫逸字元的符號,
卻不喜歡他當路徑,或是namespace,
為啥我會說換個觀點還蠻適合的,
是因為,namespace在某種程度上有路徑的味道
只是我不喜歡"\"當路徑的原因
是因為,URL(URI)或是其他有關路徑的用法,除了win的
基本上都是統一用"/",所以我一直到現在還沒法包容,路徑用"\"
所以一直都對"\"用來當路徑覺得很"刺目" (好拉,我承認沒啥包容心,心裡總是用美感來掩蓋,但我想這是賦予文字情緒的議題)


腦中不斷著在打轉
為啥他們不乾脆就用"/"
因為"/"被用來當除法


那會啥不用".",這是大家習慣的
因為"."被用來字串相加,
那為啥要採用"."來當字串相加,
不用大家習慣的"+",我猜應該是
"+"用來當作字串的數字相加,會自動的把字串轉成數字


好拉,只好應用人與人相處的法則拉,用欣賞的角度去看
漸漸就會愛上(包容)這個人(用法)拉。
(不想用包容,因為包容被我賦予著負面的情緒,有勉強的感覺,而愛上,則沒有勉強的感覺,是無條件和前提的,就只是愛,沒有理由)
其實這關乎你要不要"選擇"新的"可能性"(不一定是換),還是要在那抗拒和拉扯

想想開始學php的也是如此
一開始就覺得會啥要"$",因為一開始學C,所以很喜歡C的語法,到目前看到C的Code我都還會有莫名的快感
(用快感這個詞好像不是那麼恰當,就好像看到許久未見的親人,好朋友,愛人那樣的感覺,又是一個賦予文字情緒的例子)
後來用另個觀點想用$也不錯,因為在宣告變數上,可以不用宣告型別,或是用var,def ... 之類的東西
也可以和function和class隔開,"$"開頭這個就是變數


當然php也不強制你一定要採用namespace
http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.shouldicare


目前還是喜歡 Zend Framework 採用的那樣機制和檔案擺法
http://framework.zend.com/manual/en/zend.loader.html
雖然ClassName會有點冗長,但可以一目了然,並且可以強制你斟酌命名,和檔案擺放結構


不過目前本人愛上了
Groovy
http://groovy.codehaus.org/
Grails
http://grails.org/


那簡潔的語法和架構
只是會不會未來又發展到某個階段,又失去的簡潔的原則,失去了"美感"


怎麼寫到這覺得自己有喜新厭舊和花花公子的感覺
這樣會不會暴露自己的性格阿
讓自己少了很多遇到真命天女的機會阿


就跟你說我不喜歡寫評論的文章ㄇㄟ, :p