锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍙堝仛浜嗕竴浜涘皬涓滀笢鑰屼笖璺熺潃DFLYING澶ц櫨瀛︿細PHP浠ュ悗錛屽紑濮嬫帴鏍″唴鐨勫皬媧誨仛鈥︹︿竴涓洟濮旀棗涓嬬綉绔?/strong>
鎴愮珛Enwell Studio
]]>
web20鏈変竴鐐瑰緢閲嶈錛屽氨鏄ぞ浼氱綉緇溿傚氨鎷?a >璞嗙摚緗?/font>鏉ヨ錛屾垜閫氳繃璞嗙摚鎻愪緵鐨勪互涔︿細鍙嬬殑鍔熻兘璁よ瘑浜嗗嚑涓織瓚g浉鎶曠殑鏈嬪弸銆傝眴鐡d細鏍規嵁浣犲枩嬈㈣鐨勪功錛岀湅鐨勭數褰憋紝鍚緱闊充箰錛屾帹鑽愮粰浣犲拰浣犲叴瓚g浉鎶曠殑浜猴紝rss璁㈤槄涔熷簲璇ヨ繖鏍楓傛瘮濡侭loglines鍙互鏌ョ湅閮芥湁璋佽闃呬簡榪欎釜feed錛屽彲鏄負浠涔堜笉鏇磋繎涓姝ワ紝灝嗕袱涓漢鐨勮闃呭唴瀹逛綔姣旇緝錛屽仛鍖歸厤鍛紵閫氳繃鍦ㄤ綘鐨勭綉绔欐彁渚涚殑 rss璁㈤槄鏈嶅姟鎴戝彲浠ヨ璇嗘湅鍙嬶紝榪欎篃鏄綉绔欑矘鎬т箣涓銆傚惁鍒欏儚鎴戠幇鍦ㄥ彲浠ユ鏃犻【蹇岀殑浠巄loglines鎼鍒皉ojo鍜屾姄铏劇綉銆傝屾洿澶氳嚜鍙栫浉鍚岀殑浜哄彲浠ョ粍鎴愬湀瀛愩傜敋鑷寵鐢熸洿騫夸竴鐐癸紝澶у閫氳繃鏌ョ湅浣犵殑profile錛屾祻瑙堜綘鐨凚log錛屽喅瀹氳窡浣犲仛鏈嬪弸鐨勬椂鍊欙紝浣犱細寰楀埌涓涓獀ote鐨勫垎鏁幫紝鍦ㄦ湅鍙嬪湀鐨勮仛鍚堥棬鎴蜂笂鎺掑悕鑰冨墠錛岃繖涓笉灝辨槸鑱旂粶瀹?/font>涔堬紵
鎺ㄨ崘緇欐垜鍏朵粬璇葷墿
褰撴垜鐢ㄨ眴鐡g殑鏃跺欙紝榪樻湁涓涓姛鑳界壒鍒創蹇冿紝灝辨槸瀹冧細鎺ㄨ崘緇欐垜鐩哥被浼肩殑鍥句功銆傛瘮濡傛垜璇誨厔寮燂紝瀹冧細鍦ㄦ梺杈圭粰鎴戞帹鑽愭椿鐫錛岃涓夊叧鍗栬絳夌瓑鈥︹ss鐨勫皬闂ㄦ埛錛屽彲浠ユ牴鎹瘡涓漢鐨勫叴瓚d笉鍚岋紝鎺ㄨ崘鍦ㄦ綾誨埆涓儗digg嬈℃暟鏈澶氱殑blog緇欐垜錛岀渷寰楁垜鎬繪槸鎰熸叏:鍝庡憖錛屾庝箞娌℃棭鐐圭湅鍒拌繖涓綉绔欏憿錛?br />淇℃伅絳涢?/span>
璁㈤槄浜嗗ソ澶歳ss feed鐨勪漢閮芥湁姝ょ緇忓巻錛岄偅灝辨槸鏈夌殑鏃跺欏繖錛屼綘濂戒箙娌$湅浜嗭紝紿佺劧浠ヤ笂鏉ワ紝鎴愮櫨涓婂崈鐨勬柊鏉$洰錛屽綋鍗蟲檿鍊掋傝創蹇冪殑絳涢夋槸寰堝繀瑕佺殑錛宺ss璁㈤槄鏈嶅姟緗戠珯瀹屽叏鍙互鏍規嵁鍏朵粬鐢ㄦ埛鐨刣igg rank鏉ユ寜鐓ч噸瑕佺▼搴︾粰鎴戞帓搴忥紝澶у璁や負閲嶈鐨勫厛鐪嬶紝澶у璁や負涓嶉噸瑕佺殑鍚庣湅鈥︹︽垜鎯籌紝緹や紬鐨勭溂鐫涜繕鏄洩浜殑銆?br />鍐椾綑鐨勫墧闄?/span>
璁㈤槄浜嗗ぇ閲弐ss鐨勪漢鏉ヨ錛屾湁涓浜涚瀛愬彲鑳藉凡緇忓潖鎺変簡錛屾垨鑰呬綔鑰呮洿鏂伴鐜囧緢浣庯紝鎴栬呰繃浜嗕竴孌墊椂闂翠互鍚庯紝浣犲凡緇忎笉澶涓洪偅涓浣犳湁浠峰間簡(榪欎釜鍙互浠庝綘digg it鍜屾敹钘忕殑棰戠巼鏉ュ垽鏂?錛屼絾鏄洜涓烘垜浠繘琛屼簡澶ч噺鐨勮闃咃紝瑕佹妸瀹冨墧闄ら渶瑕佽姳璐規椂闂寸殑銆俁SS璁㈤槄鏈嶅姟鍙渶瑕佹浛璁㈤槄鑰呯湅鐫鐐瑰潖鎺夌殑縐嶅瓙錛岀粺璁′笅璁㈤槄鑰呭鍏剁殑鍏蟲敞搴︼紝鐒跺悗寤鴻鍓旈櫎鍝簺娌℃湁浠峰肩殑feed錛岃繖灝嗙粰鎴戝甫鏉ュ法澶х殑鏂逛究銆?br />鎶撹櫨涓巖ojo鐩告瘮bloglines鐨勬敼榪?/span>
rojo鏈変竴鐐瑰緢濂斤紝褰撲綘澶у紑涓涓猣eed鐨勬椂鍊欙紝浠栦滑鏄劇ず鐨勬槸title錛屽彧鏈夊綋鐐瑰嚮灝忓崄瀛楁煡鐪嬪叿浣撳唴瀹癸紝瀹冩墠璁や負浣犺榪囦簡錛屼笅嬈′綘鍐嶆墦寮榪欎釜縐嶅瓙錛岃繖涓潯鐩究涓嶄細鏄劇ず鍑烘潵銆備箣鍓嶇敤bloglines鏈夌殑鏉$洰寰堝錛屼竴澶╁彲鑳界湅涓嶅畬錛屼笅涓嬈″啀鎵撳紑灝辯湅涓嶅埌浜嗭紝鍥犱負浣犱箣鍓嶇殑鎵撳紑琚玝loglines璁や負鏄槄璇昏繃鐨勮〃鐜般傝屾湁浜涙潯鐩垜浠涓烘槸寰堟湁浠峰肩殑錛宺ojo鍜屾姄铏鵑兘鎻愪緵浜嗘敹钘忕殑鍔熻兘銆傛澶杛ojo瀵筨loglines瀵筬eed姝繪澘鐨勫垎綾誨姛鑳借繘琛屼簡鏀瑰杽錛屾浛浠g殑鏄痶ag錛屽氨鏄涓涓猣eed鍙互灞炰簬澶氫釜tag錛屼綘鐢氳嚦鍙互瀵規潯鐩繘琛宼ag錛岃繖鏍鋒洿鍔犳湁鍒╀簬灝忛棬鎴峰垎闂ㄥ埆綾葷殑鑱氬悎銆?br />鏇磋繘涓姝?br />鎴戜竴鐩存劅瑙塨log鐨勪簰鍔ㄦц繕涓嶅錛岃繖涓笉鍔ㄤ笉鏄寚comment銆傝屾槸鏃犳硶鍍廈BS涓鏍鳳紝瀵逛竴涓璁哄艦鎴愪竴涓湁涓葷嚎鐨勮窡榪涖傚ぇ瀹跺涓浜涗笢瑗塊兘鏈夎嚜宸辯殑鐪嬫硶錛屽彲鏄兘鏄浂鏁茬鎵擄紝鑷繁璇磋嚜宸辯殑錛屽鍒漢鐨勬兂娉曞彲鑳戒笉浜嗚В銆備粎浠呴潬track back鏄棤娉曚覆鑱旇搗鏉ョ殑銆傚鏋滀綘鐨剅ss璁㈤槄鏈嶅姟鑳藉鏈夎凍澶熺殑綺樻э紝閭d箞鐢ㄦ埛鍩烘湰閮戒粠浣犺繖閲岃幏寰椾俊鎭紝褰撲粬瑕佸彂琛ㄥ鏌愪釜鏉$洰鐨勭湅娉曪紝璁╃敤鎴風櫥闄嗕粬鑷繁鐨?Blog錛屽揩鎹風殑寮曠敤鍒拌嚜宸辯殑blog閲岄潰錛岃岃闃呮湇鍔$綉绔欏皢閫氳繃鏌愮鏂瑰紡灝嗙敤鎴風殑璇勮鍐呭寰楀埌銆傝繖鏍鳳紝灝嗕紬澶氱殑鐢ㄦ埛鐨勫唴瀹規暣鐞嗗嚭鏉ワ紝綾諱技BBS璁ㄨ鐨勫艦寮忥紝鑱氬悎鍦ㄩ棬鎴烽噷銆傝繖鏍鳳紝Blog涔嬮棿鎵嶅艦鎴愪簡鏈夋晥鐨勪簰鍔ㄣ傚彲鎯滐紝榪欎釜鎯蟲硶錛屼技涔庤繕涓嶇煡閬撴庝箞瀹炵幇銆?br />鎴戠殑欏甸潰&&涓漢闂ㄦ埛
鍑犱箮榪欑rss璁㈤槄鏈嶅姟緗戠珯閮芥彁渚涙垜鏀惰棌鐨刦eed鐨勫睍紺猴紝鎴戞劅瑙夎繖涓槸涓嶅鐨勩傝岃繕搴旇灞曠ず鐨勫垯鏄窡鎴戜笂闈㈡墍璇寸殑鏈夎仈緋葷殑錛屾渶榪慸igg鐨勬潯鐩紝鏈榪戞敹钘忕殑鏉$洰錛屼互鍙婃垜鏈榪戣瘎璁虹殑鏉$洰錛屼互鍙婃垜鐨勬湅鍙嬪湀絳夌瓑銆傝繖鎵嶅艦鎴愪簡鐪熸鐨勨滄垜鐨勯〉闈⑩濄?br />鐢╧eso鐨勮瘽璇達紝rss闃呰鍣ㄧ殑鎶鏈棬妲涘緢楂樺晩銆?/div>
]]>
public
聽
class
聽Artist聽
{
聽聽聽聽
聽聽聽聽String[]聽others;
聽聽聽聽
/**聽*/
/**
聽Creates聽a聽new聽instance聽of聽Artist聽
*/
聽聽聽聽
public
聽Artist()聽
{
聽聽聽聽}
聽聽聽聽
public
聽Artist(String聽name,String聽
聽others)
{
聽聽聽聽聽聽聽聽
for
(String聽other聽:聽others)
{
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(other);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
this
.others聽
=
聽others;
聽聽聽聽}
聽聽聽聽
public
聽
void
聽wildestMethod(Object聽
聽objs)
{
聽聽聽聽
//
this聽method聽will聽accept聽any聽arguments
聽聽聽聽}
聽聽聽聽
public
聽
static
聽
void
聽main(String[]聽args)
{
聽聽聽聽聽聽聽聽Artist聽artist聽
=
聽
new
聽Artist(
"
You
"
,聽
"
1
"
,聽
"
2
"
);
聽聽聽聽聽聽聽聽artist.wildestMethod(
1
,聽
3.5
,聽
"
AA
"
,聽
new
聽Artist());
聽聽聽聽}
聽聽聽聽
}
]]>
public
聽
class
聽AutoBoxing聽
{
聽聽聽聽
聽聽聽聽
/**聽*/
/**
聽Creates聽a聽new聽instance聽of聽AutoBoxing聽
*/
聽聽聽聽
public
聽AutoBoxing()聽
{
聽聽聽聽}
聽聽聽聽
public
聽
void
聽boxingDemo()
{
聽聽聽聽聽聽聽聽
//
auto聽boxing
聽聽聽聽聽聽聽聽Integer聽i聽
=
聽
0
;
聽聽聽聽聽聽聽聽
float
聽f聽
=
聽
1.66f
;
聽聽聽聽聽聽聽聽Float聽F聽
=
聽f;
聽聽聽聽聽聽聽聽
//
auto聽unboxing
聽聽聽聽聽聽聽聽Integer聽I聽
=
聽
new
聽Integer(
1
);
聽聽聽聽聽聽聽聽
int
聽i2聽
=
聽I;
聽聽聽聽聽聽聽聽
//
null聽value聽test,聽it聽will聽case聽NullPointerException
聽聽聽聽聽聽聽聽Integer聽I2聽
=
聽
null
;
聽聽聽聽聽聽聽聽
int
聽i3聽
=
聽I2;
聽聽聽聽}
聽聽聽聽
public
聽
void
聽testOperator()
{
聽聽聽聽聽聽聽聽Integer聽i聽
=
聽
1
;
聽聽聽聽聽聽聽聽
while
(
true
)
{
聽聽聽聽聽聽聽聽聽聽聽聽i
++
;
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
Counter:
"
+
i);
聽聽聽聽聽聽聽聽聽聽聽聽
if
(i
>
5
)聽
break
;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
public
聽
void
聽testCompare()
{
聽聽聽聽聽聽聽聽
//
it's聽equal聽because聽-127~127聽are聽immutable聽objects
聽聽聽聽聽聽聽聽Integer聽i聽
=
聽
1
;
聽聽聽聽聽聽聽聽Integer聽i2聽
=
聽
1
;
聽聽聽聽聽聽聽聽
if
(i聽
==
聽i2)聽System.out.println(
"
1:Equal
"
);
聽聽聽聽聽聽聽聽
else
聽System.out.println(
"
1:Not聽Equal
"
);
聽聽聽聽聽聽聽聽
//
it's聽not聽equal聽because聽j聽and聽j2聽are聽different聽objects
聽聽聽聽聽聽聽聽Integer聽j聽
=
聽
200
;
聽聽聽聽聽聽聽聽Integer聽j2聽
=
200
;
聽聽聽聽聽聽聽聽
if
(j聽
==
聽j2)聽System.out.println(
"
200:Equal
"
);
聽聽聽聽聽聽聽聽
else
聽System.out.println(
"
200:Not聽Equal
"
);
聽聽聽聽}
聽聽聽聽
public
聽
void
聽testControl()
{
聽聽聽聽聽聽聽聽Boolean聽flag聽
=
聽
true
;
聽聽聽聽聽聽聽聽Integer聽i聽
=
聽
20
;
聽聽聽聽聽聽聽聽Integer聽j聽
=
聽
30
;
聽聽聽聽聽聽聽聽
if
(flag)
{
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
Boolean聽affects
"
);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
if
(i
<
j)
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
Integer聽affects
"
);
聽聽聽聽}
聽聽聽聽
public
聽
void
聽testMethod(
double
聽arg)
{
聽聽聽聽聽聽聽聽System.out.println(
"
public聽void聽testMethod(double聽arg)聽is聽invoked
"
);
聽聽聽聽}
聽聽聽聽
public
聽
void
聽testMethod(Integer聽arg)
{
聽聽聽聽聽聽聽聽System.out.println(
"
public聽void聽testMethod2(Integer聽arg)聽is聽invoked
"
);
聽聽聽聽}
聽聽聽聽
public
聽
static
聽
void
聽main(String聽args[])
{
聽聽聽聽聽聽聽聽AutoBoxing聽auto聽
=
聽
new
聽AutoBoxing();
聽聽聽聽聽聽聽聽auto.testCompare();
聽聽聽聽聽聽聽聽auto.testOperator();
聽聽聽聽聽聽聽聽auto.testControl();
聽聽聽聽聽聽聽聽
int
聽i聽
=
聽
1
;
聽聽聽聽聽聽聽聽
//
聽public聽void聽testMethod(Integer聽arg)聽wouldn't聽be聽invoked
聽聽聽聽聽聽聽聽
//
because聽聽public聽void聽testMethod(double聽arg)聽will聽be聽invoked聽in聽JDK1.4
聽聽聽聽聽聽聽聽
//
Java聽tiger聽consider聽the聽backward聽capability
聽聽聽聽聽聽聽聽auto.testMethod(i);
聽聽聽聽聽聽聽聽auto.boxingDemo();
聽聽聽聽}
聽聽聽聽
}
]]>
public
聽
enum
聽User聽
{
聽聽聽聽Admin,User,Guest,Unknown聽聽聽
}
public
聽
class
聽Login聽
{
聽聽聽聽
聽聽聽聽
private
聽User聽user;
聽聽聽聽EnumMap
<
User,String
>
聽userName聽
=
聽
new
聽EnumMap
<
User,聽String
>
(User.
class
);
聽聽聽聽
/**聽*/
/**
聽Creates聽a聽new聽instance聽of聽Login聽
*/
聽聽聽聽
public
聽Login()聽
{
聽聽聽聽聽聽聽聽userName.put(User.Admin,聽
"
Administrator
"
);
聽聽聽聽聽聽聽聽userName.put(User.User,聽
"
David
"
);
聽聽聽聽聽聽聽聽userName.put(User.Guest,聽
"
Steve
"
);
聽聽聽聽}
聽聽聽聽
public
聽
boolean
聽isAdmin(User聽user)
{
聽聽聽聽聽聽聽聽
if
(user.equals(User.Admin))
{
聽聽聽聽聽聽聽聽聽聽聽聽
return
聽
true
;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
return
聽
false
;
聽聽聽聽}
聽聽聽聽
public
聽
void
聽printUserRole()
{
聽聽聽聽聽聽聽聽User[]聽users聽
=
聽user.values();
聽聽聽聽聽聽聽聽
for
(User聽u聽:聽user.values())
{
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(u.toString());
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
public
聽
void
聽isRole(User聽user)
{
聽聽聽聽聽聽聽聽
switch
(user)
{
聽聽聽聽聽聽聽聽聽聽聽聽
case
聽Admin:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
admin
"
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽
case
聽User:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
User
"
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽
case
聽Guest:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
Guest
"
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽
default
:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
"
unknow
"
);
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
public
聽
static
聽
void
聽main(String[]聽args)
{
聽聽聽聽聽聽聽聽Login聽login聽
=
聽
new
聽Login();
聽聽聽聽聽聽聽聽System.out.println(login.isAdmin(User.Admin));
聽聽聽聽聽聽聽聽login.printUserRole();
聽聽聽聽聽聽聽聽login.isRole(User.User);
聽聽聽聽}
聽聽聽聽
}
]]>
]]>Rasmus Lerdorf, creator of the PHP langauge, has a new tutorial on his site today that looks at the creation of a "no-framework PHP MVC framework" using PHP5, the Yahoo! User Interface Library, and JSON.
He steps through the entire process of working up the "non-framework" - the goals of the project, why to go with the MVC approach for the structure, and, of course, the code.
That arose the PHP's own MVC Pattern discussion in PHP Community.But i have my own view.Here is my response in one of most famous PHP community:
其实我认为由于lerdorf演示的是一个PHP AJAX应用,所以其实很难跟cid的方案有什么对比。由于AJAX应用的特殊性,lerdorf这个所谓的controller根本不需要考虑进行完了相关的操作以后View到底应该去哪里,应该转向哪里?因为直接push给客户端JSON对象就好了,完全不用操心到a.php还是b.php
另外,虽然lerdorf说以后可能可以多个请求Include一个xxx.inc就是他的controller,但是目前的状况,即使成为MVC也是page controller,而cid想要做的是一个Front controller做请求委派,Front Controller的复杂的明显要比PC要高,考虑的问题也多。但是并不是说FC就好,asp.net不就是典型的page controller模式么?
但是说句我的真实感受:读完之后我把它看作PHP AJAX应用示例教程更合适,lerdorf的标题起的有点大了,而且读完以后没有给我任何架构上启示性的东西聟聟
而且那个if(isset($_POST[''])){}在里面做相关操作,我还是认为挺简陋甚至丑陋的。如果一个挺复杂的view采用此种方式,还是不优雅。
所以AJAX应用的controller有一部分应该放在View里面,一个页面a.html不一定非要请求到a.php,叶面里面的操作也是要有不同逻辑划分的,但是目前没有成熟的应用示例和解决方案。大家有没有自己的尝试?
AutoAssist is an auto completion web widget that written in pure JavaScript. It can help enhance the accessibility of existing website, let the users to work effective and feel comfortable. AutoAssist Javascript only and is built upon prototype and rico. Its main features are :
* improve the User Experience
* Don't require an Ajax experience
* pretty managed JavaScript, easy to understand and customize
* works well on Mozilla/FireFox, IE and Opera
* have a nice solution for fast user typing, reduce a lot of corresponding server loading (20% - 80% *)
The code for the screenshot is very simple :
var foo = function() {
var tt = new AutoAssist("t", {setRequestOptions: function() {
var pars = "name=" + this.txtBox.value;
return { url: "/country.php", parameters: pars };
}});
}
Event.observe(window, "load", foo);
You can find a ten minutes tutorial for AutoAssist explaining in details how to use this script to create an auto-complete list based on country data.
By the way,script.aculo.us also has it's impelmention:http://demo.script.aculo.us/ajax/autocompleter
But,You still need to care javascript's FUNCTION SCOPE.Also see code snippet:
var scope = "global";
function f( ) {alert(scope); // Displays "undefined", not "global"var scope = "local"; // Variable initialized here, but defined everywherealert(scope); // Displays "local"}f( );
Right,thought you alert(scope) first and then define a new functin scope variable scope.However,once you define a function scope vriable,it will hide the global variable in the function body,whatever the definition order.