2005年3月24日         晴          于 北京交通大学16号宿舍楼

现在读大二下学期了,从大一下学期开始学习java,旁听java课程,到现在正式地上了必修的课程,一年多以来,感觉上对J2SE大概有了一个理解。不敢说钻研得很深刻,但是也能解决许多问题了。

一年来,在学习的过程中,遇到了许多问题和困难,解决问题之余也渐渐积累了不少经验。现在,同学之间讨论或者许多询问的问题中,我觉得许多都非常有代表性。从初学者的角度看,我觉得我可以提供一些经验,使现在的初学者可以少走一些弯路,或者在郁闷的时候或者坚持不下去的时候,能够看到一点希望。

这学期学校开java的必修了,很多同学在选择课本的时候,都问道我这样的问题:怎样的书合适?真的不好回答这个问题,其实要看看你的底子了。如果对在学习java之前你对Cpp很熟悉的话,那么你可以直接选择类似于《Thinking in java》这样的书籍,虽然很多人都说TIJ不太适合初学者,不过有面向对象的基础的话,这本书还是很好理解的。如果你是一个真正的初学者,那还是先看一些简单的吧,比如《The Java Tutorial》,如果你连C语言都没有碰过,那么我建议你先学一下C语言吧,因为你连基本的语法都不懂,不要太急躁了,你对java的追求只能体现出你的浮躁。

说到浮躁,这也是一个很值得我们深思的问题。说实话,我觉得我自己也有这样的倾向,不仅是我,估计大多数的人都有这个毛病。总是喜欢讨论什么语言最好,什么语言功能强大。这种讨论倒没有错,不过真正学习的时候,浮躁会使你失去很多。在学习过程中,我很努力地使自己保持心理的平静,从基础学起,甚至是一些看上去完全没有必要的基础。我可以很坦诚地说,《Thinking in java》原版第三版的前15章我至少仔细看过两次以上,书里面多处有详细的读书笔记。里面的代码60%以上的运行过,包括可能你认为很简单的switch语句,包括一些简单的类的继承。对老师上课说的代码,起码也是读过2次以上。这一年来,我读过的Java代码超过两万行,但是最复杂的每一个程序也只是一些套接字网络编程的程序,而大多数的都是代码的优化和程序的设计思想。正因为有这些经历,我才敢在这里写下这段话,才敢说我有一个勉强扎实的基础。

。。。(待续)

宿舍要熄灯了,明天继续写。
 看了张孝祥地java基础篇,然后看了孙鑫--Java无了事,呵呵,初步觉得还成,推荐观看临摹,呵呵。

PHP比ASP优秀的七个理由
ASP是微软公司实现动态网页的一种技术。ASP支持一些脚本语言,主要以VBScripp为主。与ASP相比较,你还可以选择另一中开放源代码编程语言——PHP,PHP可以运行在多种操作系统下,其中包括Linux和windows。

虽然ASP是一种不错的技术,但从长远考虑我相信PHP在将来的技术领域里会有不凡的表现。

我认为有七个理由可以说明PHP比ASP更优秀:

1、速度、速度、速度
当我第一次运行PHP脚本程序时,我不禁对自己说:“太快了”,当时我是在仪态166MHZ的机器上运行我的程序的,但运行的速度仍然很快。
ASP是永远也不会象PHP这样快的,因为ASP是建立在COM体系结构之上的。当用VBScript写ASP脚本时,实际上实在使用COM的对象,当向用户浏览器发送信息时,它用的是Response对象的write方法,当它访问数据库和文件系统的时候,它用的是其他的COM对象。这些COM对象的使用使运行速度下降。
   在PHP代码中,所有的工作都运行在PHP的内存空间中,也就是说PHP不是基于COM对象的,所以的他的运行速度会快一些。
   下面是我们在MSSQL7 40次运行一个查询语句的执行时间统计:
   PHP Querying MSSQL7 时间(秒)
   用 MSSQL extension 01.88
用 ODBC extension 09.54
用 ODBC via COM (ADO) 17.28
用OLEDB via COM 06.19
当我们使用PHP.ODBC,访问数据库用了9.54秒,而用COM接口去连接数据库需要比PHP所用的时间高80%。
   OLEDB是微软的一种高速访问数据库的技术,他比ODBC要快。但当我们所PHP和OLEDB的效率实验时,结果是PHP的整体性能比OLEDB高200%,如此的出一个结论,如果不采用COM可以获得较快的执行速度。
   当然PHP的执行速度还不是最快的,但我们才刚刚开始起步,我们会逐步的完善他,而且PHP是一种开放源代码编程语言,世界上许多程序员在不断的完善他的技术,相信他一定会比非开放源代码系统获得更高的执行速度的。

2、高级内存管理
   在IIS4下,一个ASP脚本header.asp,如果被20个页面所包含,那么运行的时候,在内存当中会保留这20个header.asp的编译副本,IIS5解决了这个问题,但只有windows2000才支持IIS5,由于这种IIS5的不能向下兼容的原因,许多服务器仍然要使用IIS4下的低级的内存管理。
   而在PHP中,不会存在这种问题,只有当require时,才会调用某个include文件。

3、没有后顾之忧
   我非常憎恨的一件事情就是会买到一件不放心的产品,比如当你买了一辆汽车,但由于发动机是坏的,你需要更换他;当你买了一栋房子的时候,你要去修补漏雨的屋顶。
   那么ASP旧乡这些产品一样,当你买了ASP之后,如果你需要加密技术,你就要买ASPEncrypt;当你需要Email管理时,你就要买ServerObjets Qmail;当你需要文件上传时,你还要买Artisans SA-FileUp.

4、MySQL使PHP更精彩
   PHP与MySQL的组合既简单又精彩。PHP有许多管理和维护MySQL的工具,对MySQk的支持是最全面的。许多有用的函数如mysql_insert_id和mysql_affected_rows等,其他的数据库则没有。
   ASP和PHP都是中型网站的较理想的解决方案,但PHP与MySQL的紧密结合使PHP更加优越。
   MySQL的虚度比Microsoft Access速度快,Mssql和Oracle速度比MySQL要快,可是费用较高。
  
5、Java和C++的变成风格
   这个优点只是一个看法。 
   我知道你不会相信一个Visual Basic程序员会因为PHP有Java和C++的编程风格而转向使用PHP,但你会相信有许多人还是喜欢Java和C++的,PHP是一种具有这两种语言的编程风格的较容易学习的语言。
   PHP支持结构化编程,在VB因为他的继承性使用类还是较少的。而PHP的象Java和C++一样的继承性使一个大型的程序中到处都充满了类的影子。
 
6、Bug的处理。
   你是否曾经要求Microsoft修改ASP的一些Bug呢?如果你不是一个象Boeing一样的组织,你无法获得迅速而恰当的修改,把么当你遇到Bug而停止工作时,如果这个Bug不修改,你将无法继续你的工作的。
   PHP,当你发现Bug时,你可以修改他,如果你没有专家的水平,你可以请专家修改,并且你的修改会得到开放代码组织的接受和认可。
 
7、移植性
   Microsoft经常修改ASP,下一版本叫ASP+,现在已经开始测试。我相信他们会修改许多我曾经提到过的问题。但也无庸质疑的,Microsoft会将你限制在他们的产品范围之内的。
   我曾经是一个苹果机的程序员,当windows95问世后,我开始转变,但许多原来的代码都无法在windows95下运行,这些代码现在被放在一边,我非常的遗憾。所以我不希望在windows下再出现这样的悲剧。
   不要忘记Novell曾经也象Microsoft的网络操作系统一样热及一时,但现在已经没有许多人用了,那么Microsoft也会这样的。
   我找到了PHP,我仍旧在windows下工作,但我知道PHP代码可以运行在Solaris、Linux和许多其他的操作系统中,我的心里感到安慰。

简单的类定义

class SimpleClass
{
   // 成员声明
   public $var = 'a default value';

   // 方法声明
   public function displayVar() {
       echo $this->var;
   }
}
?>  
new
要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。(很像java,呵呵)
创建一个实例e

$instance = new SimpleClass()
?>  
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。

对象赋值

$assigned   =  $instance;
$reference  =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>  

上例将输出:

NULL
NULL
object(SimpleClass)#1 (1) {
  ["var"]=>
    string(30) "$assigned will have this value"
}

extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。

被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。

例子 19-4. 简单的类继承

class ExtendClass extends SimpleClass
{
   // Redefine the parent method
   function displayVar()
   {
       echo "Extending class\n";
       parent::displayVar();
   }
}

$extended = new ExtendClass();
$extended->displayVar();
?>  

上例将输出:

Extending class
a default value


看后觉得如果有Java基础是不是感觉这个问题很是简单了呢。。。。呵呵

ajax可以说的上当今很火的技术啦.
在村子里经常看到有人问xajax的技术,说实话,我觉得那东西太麻烦,用起来太费事.

ajax本身实现的机制不是很难,难的应该是在后期的javascript处理返回的responseText,responseXml

ajax本身的操作过程无外是:

1.构建一个xmlHTTP对像
2.通过xmlHTTP的同步或是异步方式发送数据(大部分都是异步方式)
3.如果是异步方式检查xmlHttp的状态变化
4.当状态变到readyState==4,而且status==200说明发送数据成功
5.这时候再通过javascript处理xmlHTTP的responseText或是responseXml(这两者是同时存在的)

下面来实现这个过程
1.构建一个xmlHTTP的对像


CODE:function createRequest(){
       if(typeof XMLHttpRequest!="undefined")        {
               return new XMLHttpRequest();
       }else if(typeof ActiveXObject!="undefined"){
               var xmlHttp_ver  = false;
               var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
               if(!xmlHttp_ver){
                       for(var i=0;i<xmlHttp_vers.length;i++){
                               try{
                                       new ActiveXObject(xmlHttp_vers[i]);
                                       xmlHttp_ver = xmlHttp_vers[i];
                                       break;
                               }catch(oError){;}
                       }
               }
               if(xmlHttp_ver){
                       return new ActiveXObject(xmlHttp_ver);
               }else{
                       throw new Error("Could not create XML HTTP Request.");
               }
       }else{
               throw new Error("Your browser doesn't support an XML HTTP Request.");
       }
}
注意:xmlHttp_vers 应该从版本高的往版本低的写,这样建立对像的数据调用的是你机子上安装过的最高版本的MSXML2.XmlHttp


第二步发送数据
这里主要是调用xmlHttp的open方法和send方法来处理
xmlHTTP的方法可以到www.xmlhttp.cn查看(我以前发过一个chm的,但因为版权被村长删除啦,谁要是想要,回信,我发一下)
下面是用post的方法发送数据


CODE:var xmlHttp;
xmlHttp = createRequest();
function sendPostRequest()
{    
       var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
       var url = "show.php";//要发送到的URL
       var queryString = "shownum" + "=" + shownum;
       //向服务端发送请求
       xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
       xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
       xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
       xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
第三步

当状态改变时会调用onreadystatechange属性指定的回调函数showData,来来检查状态变化

xmlHTTP.readyState 和xmlHTTP.status 可以去查手册,看一下就知道


CODE:function showData()
{
       var msg=document.getElementById("status");
                    //第4步
       if(xmlHttp.readyState==4)
       {
               if(xmlHttp.status==200)
               {
                //只有当readyState为4并且status为200时,才表示符合要求
                                                              //下面这一句话,就相当于上面说的第5步,处理返回的结果
                       msg.innerHTML =  xmlHttp.responseText;
               }
       }
       else
       {
               switch(xmlHttp.readyState)
               {
               case 0:
                       msg.innerHTML="未初始化...";
                       break;
               case 1:
                       msg.innerHTML="加载中...";
                       break;
               case 2:
                       msg.innerHTML="连接完成...";
                       break;
               case 3:
                       msg.innerHTML="交换数据...";
                       break;
               default:
                       break;
               }
       }
}
到这里就一次xmlhttp发送异步调用数据也就算完成啦
完整的代码是


CODE:<html>
<head>
<title>
ajax
</title>
<script language="javascript">
function createRequest(){
       if(typeof XMLHttpRequest!="undefined")        {
               return new XMLHttpRequest();
       }else if(typeof ActiveXObject!="undefined"){
               var xmlHttp_ver  = false;
               var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
               if(!xmlHttp_ver){
                       for(var i=0;i<xmlHttp_vers.length;i++){
                               try{
                                       new ActiveXObject(xmlHttp_vers[i]);
                                       xmlHttp_ver = xmlHttp_vers[i];
                                       break;
                               }catch(oError){;}
                       }
               }
               if(xmlHttp_ver){
                       return new ActiveXObject(xmlHttp_ver);
               }else{
                       throw new Error("Could not create XML HTTP Request.");
               }
       }else{
               throw new Error("Your browser doesn't support an XML HTTP Request.");
       }
}

var xmlHttp;

function sendPostRequest()
{    
                    xmlHttp = createRequest();
       var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
       var url = "show.php";//要发送到的URL
       var queryString = "shownum" + "=" + shownum;
       //向服务端发送请求
       xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
       xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
       xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
       xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
function showData()
{
       var msg=document.getElementById("status");
                    //第4步
       if(xmlHttp.readyState==4)
       {
               if(xmlHttp.status==200)
               {
                //只有当readyState为4并且status为200时,才表示符合要求
                                                              //下面这一句话,就相当于上面说的第5步,处理返回的结果
                       msg.innerHTML =  xmlHttp.responseText;
               }
       }
       else
       {
               switch(xmlHttp.readyState)
               {
               case 0:
                       msg.innerHTML="未初始化...";
                       break;
               case 1:
                       msg.innerHTML="加载中...";
                       break;
               case 2:
                       msg.innerHTML="连接完成...";
                       break;
               case 3:
                       msg.innerHTML="交换数据...";
                       break;
               default:
                       break;
               }
       }
}

</script>
</head>
<body>
<div>要发送的数据:<input name="shownum" id="shownum" type="text"><input type="button" name="search" value="发送" onClick="sendPostRequest()"></div>
<div id="status"></div>
</body>
</html>
同一目录下要有一个show.php
内容为


CODE:<?php
$shownum = $_POST["shownum"];
echo $shownum;
?>
3D到底有什么好,感觉就是好玩,呵呵。。。。
Linux:每一个虚拟桌面都是一个独立的立体
http://desk3d.sourceforge.net/screenshots.php

Apple公司:把每一个虚拟桌面贴在四方体的每一个面上
http://www.apple.com/macosx/features/fastuserswitching/

SUN公司:每一个窗口都是一个独立的立体
http://wwws.sun.com/software/looking_glass/details.html

--------------------------------------------------------------------------------


3d桌面,有用吗?我觉得很无聊阿
老师是这样回答的:

quote:
--------------------------------------------------------------------------------
借用法拉第的名言回答你的问题:小伙子,请问新生的婴儿有什么用呢?
关于法拉第的那句名言历史老师或物理老师都会提到:
法拉第发现电磁感应现象后,发明了世界上第一台最原始的感应发电机。这年圣诞节他为朋友们进行了表演,只见他转动摇柄,铜盘旋转起来,电流计的指针开始偏转,铜盘转得越快,电流表指针的读数就越大,在场的人都交口称誉,惟独一位贵妇人不以为然,她以不屑一顾的口吻发问:“请问先生,你发明的这玩艺儿有什么用?”法拉第不气不恼,反问道:“夫人,请问新生的婴儿有什么用呢?”
是的,一项刚被人发现的科学原理正像刚出生的婴儿一样,有谁能预料它们的未来呢?
--------------------------------------------------------------------------------

我所知sun的3d桌面用是到java+OpenGL引擎来做,是真正的3D。并且直接接手桌面系统与显卡3d显示的操作,从原理上来说是会比现在的2d桌面更加快速的。因为现在的2d系统只是把数据传给显卡并没用到3d显卡的功能的,是一种最大的浪费。其实3d桌面系统并不是像3d游戏一样占用系统资源的。因为3D运算及显示部分是交给3D桌面引擎跟显卡GPU来直接处理的,所以占资源会很少的!这种情况的理想状态就像你现在用打印机打印一样有效而少占资源!!!

3D桌面实用化还远着呢!一是大家需要时间习惯,而且现在鼠标还是平面上操作的。
本人体验过SUse10的企业版,呵呵。。。。本人还有张solaris10g的企业盘可惜没有时间安装。。。。玩玩应该很好的。


 你说软件打败了硬件了还是硬件打败了软件了呢,理论上应该是硬件打败软件,应为软件要在硬件上跑,但是现目前的事实是软件打败了硬件,你的硬件得适合我这个软件,尤其是像windows等的操作系统,这个神话让比尔盖茨创造了。
 你说开源于商业谁打败了,是不是商业的就很好了呢?常规说应该是商业能打败开源,但是现在地开源是否好像在说,呵呵,我们的技术你还得学者点,微软是商业吧,他也得学习linux系统的一些东西。可惜他又不开源,广进不出。
 呵呵,世界就是这么有趣,都在想向对方证明点什么,那就是他有存在地价值,而且他会很NB。。。。这才是他的核心。。
什么是黑客?

Jargon File中对“黑客”一词给出了很多个定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的。(态度和技术)

长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。 这个文化的参与者们创造了“黑客”这个词。 黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它作了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。

黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的哪个共享文化传统之上。 阅读全文
点击在新窗口中浏览此图片
问:
在CU论坛上看到一段文字:
-------------------------------------------
关于JSP的问题,就我所知,SUN公司现在已不打算继续支持JSP的发展,因为JSP其实还是JAVA,当初搞JSP主要是因为用JAVA写页面比较麻烦,为了与ASP在WEB方面竞争(SUN公司好象有专门的文档写这个事,我肯定看过)。SUN公司已经明确表示与ZEND公司合作支持PHP+JAVA,用PHP做前台显示,JAVA做商务逻辑,JSR规范正在讨论之中。在新的PHP5的架构中,肯定为JSR预留了接口,就我用PHP4+JAVA的经验,真的是结合容易,效率提高很多,写程序也很简单,在PHP方面写页面简单,在JAVA方面写事务处理简单,两者结合很是舒服。但PHP4与JAVA之间的接口还是不成熟,在MOD方式或是线程方式下还是有问题。
-------------------------------------------
真的吗?
这是否能看出一些PHP的发展方向和应用前途?
______________________________________________________________________________________________
答1:
PHP也该有个什么团队与其合作了,要不然他真的是没什么发展的,现在好了,有Java就好了。
______________________________________________________________________________________________
答2:
估计主要是在socket和web service编程方面发展。
______________________________________________________________________________________________
答3:
有这个就更好了,要不PHP这个民间组织般的技术的发展前景确实暗淡。
______________________________________________________________________________________________
答4:
Free很好,但是要一直坚持Free就比较苦难了~~
______________________________________________________________________________________________
答5:
假的!
______________________________________________________________________________________________
答6:
作者在瞎吹.
______________________________________________________________________________________________
答7:
吹牛也好,给人一点光明的希望啊
______________________________________________________________________________________________
答8:
ft!
拜托楼顶的个别同志去国外站点看看!
都是老得快掉牙的信息了
还有人怀疑真实性
尽管翻译可能有出入
但是确实有这事!
______________________________________________________________________________________________
答9:
是吗
______________________________________________________________________________________________
答10:
又多了一门新的语言!!!!!
什么时侯学习的完啊!!!!!


如果是真,当然支持,因为我是用php和JAVA来工作,可加快开发web!!!
______________________________________________________________________________________________
答11:
哦?
第一次听说
看来,这一个月的php没白学,将来还有点用,又要抗起我的老本行java了
______________________________________________________________________________________________
答12:
估计PHP5应该有着方面的特性吧
______________________________________________________________________________________________
答13:
实际上对JAVA和dotNET的支持,在4.X版本中就有提供测试部分的~~~~或许5.X进行了完善吧~~
______________________________________________________________________________________________
答14:
这可能是大型网站的顶尖搭配。如果数据库再用Oracle10g的话
先展望php6(当然也可能是php5.2之类,暂未确定)

去掉的东西(感觉有必要提的)
2.1 register_globals
这个影响安全,又不好处理.
2.2 magic_quotes
这个本意很好,但反对的声音很多…
2.3 safe_mode
这个东西被E_CORE_ERROR代替了.
2.11 register_long_arrays, HTTP_*_VARS
这个东西影响速度

特别的
1. Unicode
这个东西好!不用再担心很多了.
3.1 XMLReader / XMLWriter in the distribution, on by default
以后处理rss之类的就更容易了
3.2 Move non-PDO DB extensions to PECL
下面特别讨论.
3.3 Move ereg to PECL
实际preg,ereg差不多.用两个等于浪费.

其余的参见(http://www.php.net/~derick/meeting-notes.html)

============================================
下面描述一下,在php6,没有mysql_*,我们怎么过.

首先要连接mysql数据库
$dbh = new PDO(’mysql:host=localhost;dbname=test’, $user, $pass);
//如果你想连mssql:
//mssql:host=localhost;dbname=testdb
//连pgsql:
//pgsql:host=localhost port=5432 dbname=testdb user=bruce password=mypass
//连odbc(DSN)
//odbc:testdb
//连access:
//odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin
//还有oracle,sqlite,db2….

我要执行个查询
foreach ($dbh->query(’SELECT * from FOO’) as $row) {
print_r($row); //这个结果和mysql_fetch_array差不多。PDOStatement::setFetchMode 可以调整。
}
//现在多简单

另外还可以:
$sth = $dbh->prepare(”SELECT name, colour FROM fruit”);
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print(”Fetch all of the remaining rows in the result set:\n”);
$result = $sth->fetchAll();
print_r($result);
得到:
Fetch all of the remaining rows in the result set:
Array
(
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)

[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)

)

偶还想删/更新条数据。
$count = $dbh->exec(”DELETE FROM fruit WHERE colour = ‘red’”);
//$count就是删除的条数。相当于mysql_affected_rows
//也可用PDOStatement::rowCount

偶忘了偶用啥数据库了。。。。
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == ‘mysql’) {
echo “Running on mysql; doing something mysql specific here\n”;
}

偶插入数据的时候要用mysql_escape_string.现在?

print “Unquoted string: $string\n”;
print “Quoted string: ” . $conn->quote($string) . “\n”;
得到:
Unquoted string: Nice
Quoted string: ‘Nice’
//你看现在连引号都自动加了。。。。
//注意在不同的数据库中结果不同,比如有的’ => ‘’,有的’ => \’,\ => \\
//现在没顾虑了,全自动。

//最后偶要关闭它了
$conn = null; //fcicq和这个数据库连接要说再见了。。。。
//但是!你可以:
$dbh = new PDO(’odbc:SAMPLE’, ‘db2inst1′, ‘ibmdb2′,
array(PDO_ATTR_PERSISTENT => true)); //保持连接

很简单的不是?

附:特别简单的特殊调用方法:
$stmt = $dbh->prepare(”SELECT * FROM REGISTRY where name = ?”);
if ($stmt->execute(array($_GET[’name’]))) { //你怕啥?自动quote!
while ($row = $stmt->fetch()) {
print_r($row);
}
}

也可以:
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES[’file’][’type’]);
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);

这么好的功能,哪里可以找到?php5.1以上在扩展里,php5在pecl里,php4?你别想了,没有。
类与对象(PHP5)之五:抽象类(Class Abstraction)
PHP 5中引入了抽象类和抽象方法。不允许创建一个已经定义为abstract的类的一个实例。任何至少包含一个抽象方法的类也必须是抽象的。被定义为抽象的方法仅仅是声明方法的一个信号,并不能定义它们的实现。
当从一个抽象类继承时,在父类中所有抽象方法的标记的声明必须通过子类定义;另外,这些方法必须用定义相同的访问属性。例如,如果方法被定义为protected类型,执行函数必须定义为protected或public.
例子 19-16. 抽象类例子


PHP代码如下:

abstract class AbstractClass
{   // Force Extending class to define this method
   abstract protected function getValue();
   abstract protected function prefixValue($prefix);
   public function printOut()  // Common method
   {  
       print $this->getValue()."\n";
   }
}
class ConcreteClass1 extends AbstractClass
{   protected function getValue()
   {  
       return "ConcreteClass1";  
   }
   public function prefixValue($prefix)
   {
       return "{$prefix}ConcreteClass1";
   }
}
class ConcreteClass2 extends AbstractClass
{   public function getValue()
   {  
       return "ConcreteClass2";  
   }
   public function prefixValue($prefix)
   {
       return"{$prefix}ConcreteClass2";
   }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";
$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>


上例将输出:


CODE:
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

旧代码拥有非用户自定义的命名为abstract的类或函数将要运行如果没有被修改

最近比较忙

WEB2.0 jackx 2006-10-25 22:47
....................................I am busy @
编者按:
看到这些多“开始”→“运行”命令,你肯定会感叹Windows命令的强大,甚至是“叹为观止”呀!  
   winver---------检查windows版本
   wmimgmt.msc----打开windows管理体系结构(wmi)
   wupdmgr--------windows更新程序
   wscript--------windows脚本宿主设置
   write----------写字板
   winmsd---------系统信息
   wiaacmgr-------扫描仪和照相机向导
   winchat--------xp自带局域网聊天
   mem.exe--------显示内存使用情况
   msconfig.exe---系统配置实用程序
   mplayer2-------简易widnows media player
   mspaint--------画图板
   mstsc----------远程桌面连接
   mplayer2-------媒体播放机
   magnify--------放大镜实用程序
   mmc------------打开控制台
   mobsync--------同步命令




--------------------------------------------------------------------------------


dxdiag---------检查directx信息
   drwtsn32------ 系统医生
   devmgmt.msc--- 设备管理器
   dfrg.msc-------磁盘碎片整理程序
   diskmgmt.msc---磁盘管理实用程序
   dcomcnfg-------打开系统组件服务
   ddeshare-------打开dde共享设置
   dvdplay--------dvd播放器




--------------------------------------------------------------------------------


net stop messenger-----停止信使服务
   net start messenger----开始信使服务
   notepad--------打开记事本
   nslookup-------网络管理的工具向导
   ntbackup-------系统备份和还原
   narrator-------屏幕“讲述人”
   ntmsmgr.msc----移动存储管理器
   ntmsoprq.msc---移动存储管理员操作请求
   netstat -an----(tc)命令检查接口




--------------------------------------------------------------------------------


syncapp--------创建一个公文包
   sysedit--------系统配置编辑器
   sigverif-------文件签名验证程序
   sndrec32-------录音机
   shrpubw--------创建共享文件夹
   secpol.msc-----本地安全策略
   syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
   services.msc---本地服务设置
   sndvol32-------音量控制程序
   sfc.exe--------系统文件检查器
   sfc /scannow---windows文件保护




--------------------------------------------------------------------------------


tsshutdn-------60秒倒计时关机命令
   tourstart------xp简介(安装完成后出现的漫游xp程序)
   taskmgr--------任务管理器




--------------------------------------------------------------------------------


eventvwr-------事件查看器
   eudcedit-------造字程序
   explorer-------打开资源管理器




--------------------------------------------------------------------------------


packager-------对象包装程序
   perfmon.msc----计算机性能监测程序
   progman--------程序管理器




--------------------------------------------------------------------------------


regedit.exe----注册表
   rsop.msc-------组策略结果集
   regedt32-------注册表编辑器
   rononce -p ----15秒关机
   regsvr32 /u *.dll----停止dll文件运行
   regsvr32 /u zipfldr.dll------取消zip支持




--------------------------------------------------------------------------------


cmd.exe--------cmd命令提示符
   chkdsk.exe-----chkdsk磁盘检查
   certmgr.msc----证书管理实用程序
   calc-----------启动计算器
   charmap--------启动字符映射表
   cliconfg-------sql server 客户端网络实用程序
   clipbrd--------剪贴板查看器
   conf-----------启动netmeeting
   compmgmt.msc---计算机管理
   cleanmgr-------垃圾整理
   ciadv.msc------索引服务程序




--------------------------------------------------------------------------------


osk------------打开屏幕键盘
   odbcad32-------odbc数据源管理器
   oobe/msoobe /a----检查xp是否激活
   lusrmgr.msc----本机用户和组
   logoff---------注销命令  




--------------------------------------------------------------------------------


iexpress-------木马捆绑工具,系统自带




--------------------------------------------------------------------------------


nslookup-------ip地址侦测器




--------------------------------------------------------------------------------


fsmgmt.msc-----共享文件夹管理器



--------------------------------------------------------------------------------


utilman--------辅助工具管理器



--------------------------------------------------------------------------------


gpedit.msc-----组策略


Windows Media Player文件

多谢来到这个BLOG的每一位朋友。

Ajax的话题最近很火,不过其实从我本身的感受来看,它并不适合构建一个大型的Web应用。只适合去实现应用中的一部分功能。这样不仅能为应用增色不少,也可以沿用原有的Web层框架来减轻开发过程的负担。
因为说到底,Ajax只是一个概念,最核心的东西还是XmlHttpRequest对象,外加CSS和DOM技术。

很多朋友给我们提意见,认为Ajax这一部分的内容写得相对薄弱,而且知识体系不够完整。关于这一点,我们要向读者朋友道个歉,我想如果有机会我们会奉献更好的Ajax技术书籍给读者朋友的。

其实出版社一直希望以Ajax打开这本书的销路,不过从我们作者本身来看,也许Lucene才是真正会吸引读者的内容。很多朋友在MSN上和我们交流Lucene的内容,这另我们也非常受用,很多朋友的技术水平都在我们之上,他们很诚恳的提出他们对于Lucene的一些看法同时讨论一些技术细节,令我们受益匪浅,如果有机会,一定整理一下,出一本Lucene的专门的书籍。(呵呵。。。不知道出版社肯不肯)

希望大家可以在这里和我们一起讨论相关技术
阅读全文
分页: 266/271 第一页 上页 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 下页 最后页 [ 显示模式: 摘要 | 列表 ]