无忧岛

15 七, 2010

php面向对象OOP编程教程(三) - 类的实例化

Posted by: kinglife In: php

所谓实例化,就是前面我们提到的具体化,只不过实例化这个术语更专业一些,多认识些专业术语没有坏处,说起这个专业术语啊,这个……啊!这个这个……啊!我经常看到一些人,本来很简单的事情,被他们一口一个专业术语,把人家外行人(大部分是客户)忽悠得晕头转向,结果被忽悠的人还在那边一脸一个羡慕……我们不提倡忽悠人,但是我们得建立自己的防忽悠热线,所以多认识一些专业术语还是非常有必要的。

扯远了,我们把类实例化以后就可以得到对象了,将类实例化的方法:

$对象名称 = new 类的名称();

结合前面的代码,我们要创建一个“春哥”,实际上就是要实例化一个名称为“春哥”的对象,代码如下:

$brother_chun = new Role();

到这里可能要有人感叹了,这PHP的OOP咋越玩越简单呢?没错,后面会越来越简单。为了方便大家查看,给出完整的代码如下:


class Role //角色类
{
    //属性部分
    var $role_name; //角色的名字
    var $role_sex; //角色的性别
    var $role_skill; //角色的技能

    //方法部分
    function roleTalk() //角色说话
    {
        echo '我会说话<br />';
    }

    function roleFight() //角色发招
    {
        echo '我会发招<br />';
    }
}

//将角色类实例化
$brother_chun = new Role(); //创建一个名称为“春哥”的对象
$brother_zeng = new Role(); //创建一个名称为“曾哥”的对象
$sister_feng = new Role(); //创建一个名称为“凤姐”的对象

当然我们还可以创建无数个其他人,虽然代码比较少,但是类的第一个好处代码重用已经显而易见了,我们可以通过一个类来创建无数个对象,设想如果一个类里面有成百上千行代码的话,我们可以节省多少行代码啊?

再设想,我们已经在游戏里创建了100个人,突然某天我们想要修改他们,如果不使用类创建的话,那么我们可能就要修改100个地方,而我们使用了类之后,仅仅只需要修改1个地方——修改我们的类即可,于是类的第二个好处易于维护也显而易见了,我们可以节省多少精力啊?

作者:hetty 首发地址:http://www.im286.com/thread-4823948-1-1.html

15 七, 2010

php面向对象OOP编程教程(二) - 类的创建

Posted by: kinglife In: php

前面我已经表示得很清楚了,PHP是一种混合型语言,这也是它的优势,因此,我们可以拿起锯子就做一把椅子(面向过程),也可以经过周密的计划来建造一栋房子(面向对象),无论是面向对象还是面向过程,都有自己的优势,都要付出一定的代价.但是,我们还是要会玩面向对象才行啊,因为从某种意义上来讲,面向过程已经是一种过于”传统”的编程思想,毕竟面向对象更符合现实的逻辑.

从PHP5开始,PHP已经完全支持面向对象,PHP6势必要加强对面向对象的支持.那么PHP官方为什么越来越重视面向对象呢?答案是不言而喻的.起初,PHP只是为个人和小项目而设计的脚本语言,但是现在不一样了,作为最优秀、最流行的客户端脚本语言之一,PHP的地位已经被越来越多的人认可,现今为止它在无数大型项目上的表现也令人感到十分满意,已经证明了它足以胜任任何大型项目.由于它是跨平台、免费的,因此被越来越多的人喜爱和接纳,尤其是JAVA阵营的朋友们.

我们不妨来展望一下PHP的未来,通过AMFPHP,PHP与Flex、Flash、Json、XML等技术实现了二进制无缝通信.ActionScript3.0开始,也开始完全支持面向对象,再加上Flex和Flash助阵,我们不仅可以利用PHP来开发WEB应用程序、RIA应用程序、而且还可以开发移动应用程序(Flash逐渐开始在移动平台崭露头角,目前已经得到Android 2.2的支持,注意是真真正正的Flash,而非面向低端手机的Flash Lite,而这一切仅仅是一个开端),这对我国马上就要到来3G时代有着非凡的意义.

因此,对于一个真正的PHPer来说,如果不接触面向对象,那的确是一种遗憾.

 

好,那么从今天开始,我们就要玩代码了,PHP的类里面大概包含两个部分,即它的成员属性和成员方法,不要紧张,我们不去挖它们的概念,所谓属性和方法,就是类里面的成员变量和成员函数.所以从现在开始,只要我提到属性,大家就要下意识的想到它是一个变量;只要我提到方法大家就要下意识的想到,它是一个函数.因此,我在这里给出一个狭义的结论,请大家牢记:

属性就是变量
方法就是函数

当然对外大家不能这么说,因为他们性质是截然不同的,由于我们回避了概念性的东西,这么说仅仅是为了便于大家记忆和理解.

好,那么我们现在来玩一玩怎么创建一个完整的PHP类.这里可能会涉及到一些命名规范,关于这些规范,大家可以参阅我另外一篇文字《分享下我编程的代码规范》

http://www.im286.com/thread-4111157-1-1.html

创建类的方法:


class 类的名称
{
var $属性的名称;

function 方法的名称(参数列表)
{
……
}
}

这样就是一个完整的类,怎么样?够简单吧?它本来也就不难,只是很多人由于一些概念性问题不原意接去触它,但是一旦接触了,大家会发现,它也就不过如此嘛,的确,它也就不过如此。

一个类里面可以包含多个属性多个方法

那么我们结合前面假设开发的游戏来设计一个类:


class Role //角色类
{
    //属性部分
    var $role_name; //角色的名字
    var $role_sex; //角色的性别
    var $role_skill; //角色的技能

    //方法部分
    function roleTalk() //角色说话
    {
        echo '我会说话<br />';
    }

    function roleFight() //角色发招
    {
        echo '我会发招<br />';
    }
}

这样,一个具有完整属性和方法的类就算是建好了,是不是简单得掉渣呢?至于我们如何利用这个类来创造出”春哥”、”曾哥”和”凤姐”,并且让他们都会说话,都能发招呢?请看下玩分解.

作者:hetty 首发地址:http://www.im286.com/thread-4823948-1-1.html

假设我们要用PHP开发一个游戏……
“PHP能开发游戏吗?”
“不能吗?”
“你开发一个给我看看!”
“你给我钱嘛!”
“滚!”
(orz 不要再废话了,抓紧时间进入正题)

好了,这个无聊的争论就不要继续了,我总不能拿按钮、文本域、表格这些东东当作对象给初学者们讲述OOP吧?那样大家会崩溃的,我也会崩溃的.为了增加本教程的易懂性、通俗性和趣味性……我决定了就假设我们要用PHP开发一个游戏,都说了,要玩嘛.

首先声明OOP的概念是很重要的,因为它是OOP编程思想的基础,我在本教程里刻意的回避概念性问题,是为了降低初学者的恐惧心、增加初学者的求知欲,前面说了,很多不原意接触OOP的PHPer就是被概念折腾的.所以,大家千万不要跟人家说,啊,那个谁?Hetty说了,OOP概念算个屁,不用去管.OMG……那我岂不是成了罪人?

本教程旨在先玩会OOP,再去了解OOP的概念.如果你没有玩过星际争霸和魔兽争霸的话,突然蹦出一个人就跟你大谈游戏平衡性的概念,就算他一套一套的跟你讲得头头是道,你势必也将是一头雾水,但如果是你玩过这两款游戏的话,根本不需要谁跟你讲,就算游戏平衡性的概念再飘逸,你自己也能在玩的过程中感觉到、体会到的.OOP也是一样,你自己悟出来的要比别人言传身教的清晰牢固千百倍,这就是本教程的出发点.

至于吗?强调这么多遍……好吧,你赢了,先看图,在这个游戏里,我们将设计三个角色:

php面向对象编程教学-类和对象的关系

php面向对象编程教学-类和对象的关系

(就这水平了,将就着看吧)

红色是类,蓝色是对象.很多初学者经常把类和对象混淆,如果你是这类人,那么就多看一段时间,把这个图印在你心里,反复揣摩.如果你连思考都不愿意的话,那么就不必再往下看了,因为那是在浪费时间.

看好了吗?什么?一分钟都不到,回去继续看,是男人就持久点.

看出什么端倪了吗?我们可以看到红色的”角色”是空心的,因为它不是一个实体,只是个虚无缥渺的词汇,我们看不见摸不着,但是它却存在于我们心里;而蓝色”春哥”、”曾哥”和”凤姐”是实心的,因为它们是实体,是三个真真切切的人,我们看得见摸得着(如果敢摸的话),存在于我们的生活中.

在这个游戏中,你可以说”春哥”是一个”角色”,但绝对不能倒过来说”角色”是一个”春哥”,就像你不能说”水果”是一种”苹果”一样,不止是逻辑上说不过去,就连语法上也说不过去,这个……只需要小学语文水平就可以理解.

因此我们可以得出以下结论:

 :是抽象名称
对象:是具体东东

其实类并不是什么新的概念,类,顾名思义,就是分类、种类、类别……我们从小就开始接触它了,习惯好的小朋友喜欢把自己的东西整理归类摆放好,比如变形金刚放一边啊、小人书放一边啊……这“变形金刚”和“小人书”就是类了啊。

既然我们主题是玩,那么就拿“变形金刚”这个类来说说,它是很笼统、很抽象的名称,而非一个实体。如果把它具体化,那么我们就可以得到实体的对象,比如“大黄蜂”、“擎天柱”、“铁皮”。

“大黄蜂”、“擎天柱”、“铁皮”用抽象点的话说就是“变形金刚”。
“变形金刚”用具体点的话说就是“大黄蜂”、“擎天柱”、“铁皮”。

因此我们可以得出以下结论:

对象抽象化
对象具体化

把一个类具体化以后可以得到多个对象,把多个对象抽象化后可以得到一个类.

这时有人就会问了,生活中的类我们很熟悉,很好区分啊,那么程序中的类该怎么区分呢?其实道理是一样的,我们把有相同特征的东东归为一类就可以了.比如”大黄蜂”、”擎天柱”、”铁皮”,他们有相同的特性(属性):有高度、有重量、有颜色;他们有相同的行为(方法):会变形、会说话、会走路.因此,在程序中,我们经常把具有相同属性和方法的对象归为一类.

每个对象都是唯一的,就算你有两个一模一样的”大黄蜂”,但是每个”大黄蜂”都是独立存在的个体,就像同名同姓的人很多,但是”春哥”却是这个世界上独一无二的(多了这个世界会灭亡的).

程序与生活不同的地方:

在生活中,往往是把一组对象归为一类:先有了很多苹果的果实,我们才能把它们归为苹果类.
在程序中,往往是用类来产生一组对象:先有了角色类,我们才能创造出春哥、曾哥和凤姐来.

好了,今天就玩到这里,表达能力有限,不知道大家看明白没有?如果没有看明白的话,争取看明白,因为这篇看明白了,后面就将一马平川,越来越好玩.

作者:hetty 首发地址:http://www.im286.com/thread-4823948-1-1.html

15 七, 2010

php面向对象OOP编程教程

Posted by: kinglife In: php

好久没有来落伍了,既然来了就做点微薄的贡献吧.既然是教程,为什么说”玩”而不说”学”呢?问得好,因为说”学”的话,别人一看见标题基本就躲得远远的,根本懒得去点,说”玩”的话,估计还有那么一两个人来点,哈哈,好吧,我承认我是标题党,你赢了.

还是那句老话:我的个人能力有限,教程如果有什么疏漏和不足的地方,望大家多多见谅,也欢迎大家批评指正.

[目标读者]
本教程假设读者已经有了一定的PHP编程基础和经验,但还未开始接触PHP面向对象编程(以下简称OOP).因此,如果你是小鸟或者大鸟,都可以选择直接路过了.

[教程宗旨]
这是一篇有悖常理的、大胆的教程,因为我要在不涉及或尽少涉及OOP概念的前提下,向读者介绍PHP的OOP.绝大部分PHPer对OOP敬而远之、退避三舍,就是被OOP那抽象繁琐、把人弄得焦头烂额的概念吓跑的,所以,本教程有意识的避开了OOP概念的讲解,力求通过实例用最简单、最通俗的方式来表述PHP的OOP.

[教程目录]
第1课——————类和对象的关系
第2课——————类的创建
第3课——————类的实例化
第4课——————类的访问
第5课——————类的构造方法和析构方法
第6课——————类的封装
第7课——————类的特殊方法
第8课——————类的继承
第9课——————类的重载
第10课—————类的关键字(待续)

………………
(边写边补充吧)

由于时间的关系,我可能无法保证本教程有一个正常规律的更新速度,在此希望大家能够见谅,没有耐心的朋友可以等到教程连载完毕再看.

首先是关于PHP的,PHP在很多大型项目中被运用,比如大家熟知的:

百度:http://www.baidu.com/index.php
淘宝:http://www.taobao.com/index.php

等等,由于篇幅关系,我就不多举例了.PHP在国内外大型项目中的运用是屡见不鲜的,它被证明强大是经受了无数实战考验的,每个人都有权质疑它的强大,但是在此之前,我们需要先抱着谦卑的态度去了解它.

这里融入一些个人感情,注意是个人的,我最喜欢、用得最多的服务端脚本语言就是PHP,也认为它是所有服务端脚本语言中最优秀的.

其次是关于PHP的OOP,这是仁者见仁智者见智的事情,PHP是混合型语言,这也可以看作是它的优势之一.

我们可以拿起锯子就做一把椅子,但是不经过计划拿起锯子就来建造一栋房子,房子的质量就没有保证了.

那么有位回帖的朋友就刚好说反了,OOP其实可以让PHP的代码更加简洁易懂,除此之外,更加易于维护,并且具有更强的重用性.

然后是关于PHP的基础,请参看我2006年发的一篇教程《30分钟学会用PHP写带数据库的简单通讯录》

http://www.im286.com/thread-1738385-1-1.html

下面开始写正题.

作者:hetty 首发地址:http://www.im286.com/thread-4823948-1-1.html

21 六, 2010

Magento 使用总结的一些细节记录

Posted by: kinglife In: Web

magento是国外一款优秀的PHP+MYSQL开源B2C电子商务解决方案,的确很强悍,我以前曾用过Zen-cart,相对来说Magento比较难入门一些,magento 的确很强悍,对于初学者来说 建议还是先了解下这个系统的运行机制

对于未接触过国外开源的解决方案的朋友来说已经习惯于拿到东西就找templates/skins目录,找html的模板文件,然后看标签,打开后台修改等等…而国外的开源并非这么简单.

前几天我用的是magento 1.4.0.1,据说这个版本跟上个版本默认的模板结构发生了一些变化,现有模板结构是(只列出部分常用文件结构,详细结构可以用google或者官方上看下,全部列出来反而让人觉得繁琐,不易理解):

app/design/frontend/base/default/tempate/

据说这个目录以前是在app/design/frontend/default下面的,后来因为magento的使用者乱改default的模板影响使用,所以官方为了避免使用者乱改默认模板,为了突出其重要性,在1.4.0.1以后移至此目录中了..

在目录 app/design/frontend/base/default/tempate/

有layout目录 是存储页面布局数据的

重要的是template目录,存储了网站的模板文件,在此目录中打开 page/html文件夹你会看到网站主要的模板文件,注意:模板文件的后缀都是.phtml

另外 模板的样式.css文件/图片文件都在

skin\frontend\default对应的目录中

app/design/frontend/base/default/tempate/

假设我们要修改logo,打开\app\design\frontend\base\default\template\page\html\header.phtml文件,代码


<h1 class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this->getLogoAlt() ?>" class="logo"><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /></a></h1>

代码中我们可以看到 “$this->getLogoSrc() ” 而不是传统模板里面的源地址,而这个getlogosrc数据存储在哪里呢? 继续打开

app\code\core\Mage\Page\etc\config.xml ,节点logo_src中我们看到


 <logo_src>images/logo.gif</logo_src>

相信到这里大家对magento的模板机制有了个基础的认识了吧.

到这里你可能也许觉得,我kao 我每次改个东西还要到xml文件里改呀? 当然,那是不可能的,xml存储配置数据而已,所有数据的操作在后台就可以了:
打开后台 System - Configuration - Design - Header

在这里你也同样可以修改.

另外注意个地方,关于很多人出现的首页不显示产品的问题.其实很多网上都是有了,譬如产品分类的IsActive属性,产品的库存量,Status等等

有个自己遇到的重点问题提醒下,就是关于默认分类的选择,Magento默认有个分类,如果你当前添加的分类全部隶属于这个分类,那么才会显示在首页,即首页的分类导航位置以及最新的产品.

当然如果你也可以自己再添加一个Root Category,然后再该分类下添加产品分类及产品,如果这样的话需要进行设置默认的Root Category: System - Manage Stores - Main Website Store - Root Category 在下拉框中选中你刚刚添加的那一个Root Category的名字即可.

Magento 最新版下载!!

12 六, 2010

将Google设置为不会被重置的安全链接的方法

Posted by: kinglife In: IT

在用google的时候无缘无故被断开,就是打不开google的症状. 大概几分钟后才会正常使用.现在针对这种症状下面介绍下解决方法.
将Google设置为不会被重置的安全链接的方法
地址栏内输入 google.com/ncr ,自动重定向至无地区差异的Google英文主页(若此时仍被重置可以稍等几分钟再试);
在链接被重定向至英文的 www.google.com 后,在地址栏内输入 https://www.google.com 便可生效;
以后每次都使用 https 开头的google地址即可保证正常搜索!

FUCK THE GFW!!!!!!!!

Tags: ,

06 五, 2010

VB.NET完美操作XML实例,操作XML类

Posted by: kinglife In: Software

大概分为两种
一种是单数据存储,这类应用就是 保存配置之类的,所有节点元素 都是单一的,首先先看一个操作XML中的元素值的类


Public Class CSysXML
    Dim mXmlDoc As New System.Xml.XmlDocument
    Public XmlFile As String

    Public Sub New(ByVal File As String)
        MyClass.XmlFile = File
        MyClass.mXmlDoc.Load(MyClass.XmlFile)       '加载配置文件
    End Sub

    '功能:取得元素值
    '参数:node--节点       element--元素名
    '返回:元素值   字符型
    '             $--表示出错误
    Public Function GetElement(ByVal node As String, ByVal element As String) As String
        On Error GoTo Err
        Dim mXmlNode As System.Xml.XmlNode = mXmlDoc.SelectSingleNode("//" + node)

        '读数据
        Dim xmlNode As System.Xml.XmlNode = mXmlNode.SelectSingleNode(element)
        Return xmlNode.InnerText.ToString
Err:
        Return "$"
    End Function
    '
    '功能:保存元素值
    '参数:node--节点名称     element--元素名       val--值
    '返回:True--保存成功     False--保存失败
    Public Function SaveElement(ByVal node As String, ByVal element As String, ByVal val As String) As Boolean
        On Error GoTo err
        Dim mXmlNode As System.Xml.XmlNode = mXmlDoc.SelectSingleNode("//" + node)
        Dim xmlNodeNew As System.Xml.XmlNode

        xmlNodeNew = mXmlNode.SelectSingleNode(element)
        xmlNodeNew.InnerText = val
        mXmlDoc.Save(MyClass.XmlFile)
        Return True
err:
        Return False
    End Function

End Class

此类模块的功能是修改某个节点元素的值
我们保存下面代码为 shop.xml


<?xml version="1.0" encoding="gb2312"?>
<shop>
  <goods>
    <name>11111</name>
  </goods>
</shop>

打开VB.NET 在窗体上画三个文本框以及一个按钮
实现操作XML的VB.NET,写入某节点的某元素的值的代码:


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim xmlTest As New CSysXML(Application.StartupPath &amp;amp; "\test.xml")
        xmlTest.SaveElement(TextBox1.Text, TextBox2.Text, TextBox3.Text)
    End Sub

TextBox1.Text 为节点的名称,写入 goods –商品
TextBox2.Text 为元素的名称,写入 name –商品名称
TextBox3.Text 为元素的值,任意写入一个值 –值

同理,读取xml文件也一样,用GetElement获取某节点元素的值.
下面重点说下 多条记录的情况下


<?xml version="1.0" encoding="gb2312"?>
<website>
  <web name="搜狐">
    <title>搜狐-中国最大的门户</title>
    <url>http://www.sohu.com</url>
  </web>
  <web name="新浪">
    <title>新浪-中国最好的门户</title>
    <url>http://www.sina.com</url>
  </web>
</website>

所需控件listbox1 列举所有name
textbox 三个分别为 textbox4/textbox5/textbox6 ,分别用来保存/修改 name属性 title和url的值

按钮 四个分别用来增加/删除/修改/刷新

下面为全部代码


    'add
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim xmlDoc As New XmlDataDocument
        xmlDoc.Load("111.xml")
        Dim root As XmlNode = xmlDoc.SelectSingleNode("collect")   'find collect
        Dim xe1 As XmlElement = xmlDoc.CreateElement("rule")  'create

        xe1.SetAttribute("name", TextBox6.Text) '设置该节点name属性 

        Dim xe1Title As XmlElement = xmlDoc.CreateElement("title")   'create title
        xe1Title.InnerText = TextBox4.Text
        xe1.AppendChild(xe1Title)

        Dim xe1Url As XmlElement = xmlDoc.CreateElement("url")    'create url
        xe1Url.InnerText = TextBox5.Text
        xe1.AppendChild(xe1Url)

        root.AppendChild(xe1)   'add to <collect>
        xmlDoc.Save("111.xml")

        Button3_Click(Nothing, Nothing)     'refrest
    End Sub

    'read
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ListBox1.Items.Clear()
        Dim xmlDoc As New XmlDataDocument
        xmlDoc.Load("111.xml")
        Dim xn As XmlNode = xmlDoc.SelectSingleNode("collect")
        Dim xnl As XmlNodeList = xn.ChildNodes
        Dim xnf As XmlNode
        For Each xnf In xnl
            Dim xe As XmlElement = CType(xnf, XmlElement)
            If xe.GetAttribute("name") <> "" Then
                ListBox1.Items.Add(xe.GetAttribute("name")) '&amp; vbCrLf  '显示属性值
            End If
        Next xnf
    End Sub

    'delete
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If ListBox1.SelectedItems.Count = 0 Then Exit Sub
        Dim xmlDoc As New XmlDataDocument
        xmlDoc.Load("111.xml")
        Dim xnl As XmlNodeList = xmlDoc.SelectSingleNode("collect").ChildNodes
        Dim xn As XmlNode
        For Each xn In xnl
            Dim xe As XmlElement = CType(xn, XmlElement)
            If xe.GetAttribute("name") = ListBox1.SelectedItem.ToString Then
                xe.RemoveAttribute("name") '删除genre属性
                xe.RemoveAll() '删除该节点的全部内容
            End If
        Next xn
        xmlDoc.Save("111.xml")
        ListBox1.Items.Clear()
        Button3_Click(Nothing, Nothing)     'refrest
    End Sub

    'edit
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        If ListBox1.SelectedItems.Count = 0 Then Exit Sub
        Dim xmlDoc As New XmlDataDocument
        xmlDoc.Load("111.xml")
        Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("collect").ChildNodes '获取bookstore节点的所有子节点
        Dim xn As XmlNode
        For Each xn In nodeList '遍历所有子节点
            Dim xe As XmlElement = CType(xn, XmlElement) '将子节点类型转换为XmlElement类型
            If xe.GetAttribute("name") = ListBox1.SelectedItem.ToString Then '如果genre属性值为“李赞红”
                xe.SetAttribute("name", TextBox6.Text) '则修改该属性为“update李赞红”
                Dim nls As XmlNodeList = xe.ChildNodes '继续获取xe子节点的所有子节点
                Dim xn1 As XmlNode
                For Each xn1 In nls '遍历
                    Dim xe2 As XmlElement = CType(xn1, XmlElement) '转换类型
                    If xe2.Name = "title" Then '如果找到
                        xe2.InnerText = TextBox4.Text  '则修改
                    ElseIf xe2.Name = "url" Then
                        xe2.InnerText = TextBox5.Text
                    End If
                    'Exit For '找到退出来就可以了
                Next xn1
                Exit For
            End If
        Next xn
        xmlDoc.Save("111.xml") '保存。
        Button3_Click(Nothing, Nothing)     'refrest
    End Sub

本文代码均为实现代码,使用时可以根据实际需求进行优化..

Tags: , ,

24 三, 2010

css中单位px和em的区别

Posted by: kinglife In: html/xhtml

国内的设计师大都喜欢用px,而国外的网站大都喜欢用em,那么两者有什么区别,又各自有什么优劣呢?

1. IE无法调整那些使用px作为单位的字体大小;
2. 国外的大部分网站能够调整的原因在于其使用了em作为字体单位;
3. Firefox能够调整px和em,但是96%以上的中国网民使用IE浏览器(或内核)。

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。(引自CSS2.0手册)

em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。(引自CSS2.0手册)

任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

em有如下特点:

1. em的值并不是固定的;
2. em会继承父级元素的字体大小。

所以我们在写CSS的时候,需要注意两点:
1. body选择器中声明Font-size=62.5%;
2. 将你的原来的px数值除以10,然后换上em作为单位;
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。

也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。

但是12px汉字例外,就是由以上方法得到的12px(1.2em)大小的汉字在IE中并不等于直接用12px定义的字体大小,而是稍大一点。这个问题 Jorux已经解决,只需在body选择器中把62.5%换成63%就能正常显示了。原因可能是IE处理汉字时,对于浮点的取值精确度有限。不知道有没有其他的解释。

Tags: , , , ,

24 三, 2010

15个CSS常识

Posted by: kinglife In: html/xhtml

1、不要使用过小的图片做背景平铺。这就是为何很多人都不用 1px 的原因,这才知晓。宽高 1px 的图片平铺出一个宽高 200px 的区域,需要 200*200=40, 000 次,占用资源。
  2、无边框。推荐的写法是 border:none;,哈哈,我一直在用这个。 border:0; 只是定义边框宽度为零,但边框样式、颜色还是会被浏览器解析,占用资源。
  3、慎用 * 通配符。所谓通配符,就是将 CSS 中的所有标签均初始化,不管用的不用的,过时的先进的,一视同仁,这样,大大的占用资源。要有选择的初始化标签。
  4、CSS 的十六进制颜色代码缩写。习惯了缩写及小写,这才知道,原来不是推荐的写法,为的是减少解析所占用的资源。但同时会增加文件体积。孰优孰劣,有待仔细考证。
  5、样式放头上,脚本放脚下。不内嵌,只外链。
  6、坚决不用 CSS 表达式。
  7、使用 引用样式表,而不是通过 @import 导入。
  8、一般来说,PNG 比 GIF 要小,小得多。再者,GIF 中有多少颜色是被浪费的,很值得优化。
  9、千万不要在 HTML 中缩放图片,一者不好看,二者占资源。
  10、正文字体最好用偶数,12px、14px、16px,效果非常好。特例,15px。
  11、block、ul、ol 等上下留出至少一倍行距,左侧至少两倍行距,右侧随意。
  12、段落之间,至少要有一倍行距。
  13、强行指定某些元素的 line-height,正文 1.6 倍于文字大小,标题 1.3 倍。
  14、中文标点用全角。英文夹杂在中文中,左右空格,半角。
  15、中文字体的粗体和斜体,远离较好,利民利己。

Tags: , ,

29 一, 2010

苹果iPad平板电脑投票调查

Posted by: kinglife In: IT

截至2010年1月29日,新浪网关于苹果iPad平板电脑投票调查结果:
 

你认为iPad最吸引你的是

选项 比例 票数
时尚外观设计 43.5% 9,655
体积小巧便携 26.7% 5,929
苹果金字招牌 23.6% 5,240
其他 6.2% 1,380

我们从从苹果的产品来看,不管是从电话iPhone,音乐iPod,还是笔记本MacBook都可以归结于一个特点:就是时尚的外观设计,苹果产品外观设计上无可置疑是十分成功的.

你认为苹果平板电脑合理售价是多少(折合人民币):

选项 比例 票数
4000元以内 63.7% 14,144
4000元-6000元 24.8% 5,504
6000元-8000元 7.4% 1,637
8000元以上 4.1% 919

低价格依然是消费者关注的焦点

你你是否会购买苹果平板电脑?

选项 比例 票数
44.1% 9,798
看情况决定 36.5% 8,095
不会 19.4% 4,311

有80%的用户对iPad是比较有意向的.

感谢新浪网提供调查数据!

Flickr PhotoStream

    flickrRSS probably needs to be setup

About

Name:KingLife
Email:lifewz#163.com