Posts Tagged ‘属性’

img标签中alt和title属性的正确使用

星期三, 06月 4th, 2008

在deimg标签有两个属性分别为alt和title,对于很多初学者而言对这两个属性de正确使用都还抱有迷惑,当然这其中一部分原因也是ie浏览器所导致de.正确de使用这两个属性除了可以提高图片de搜索能力外,在用户体验上也是很有帮助,下面就来说说alt和titlede概念与正确使用.
alt
此属性de实质作用是图片在无法正确显示de时候起到文本替代de作用,不过在IE6下还起到了titlede作用(鼠标放上去后de文字提示),IEde实现方法实际上是错误de.如果想在鼠标滑过时显示提示,应该用title属性.由于错误de引导,很多初学者就在img标签内只加了alt属性.所以这里再次表扬一记FF!

title
鼠标滑过时显示de文字提示,用户体验上很重要.当然不必要所有deimg标签都加此属性,比方说logo这样比较重要或者说用户会体验到de图片内容建议一定要加此属性.
<img src=”图片路径” alt=”logo” title=”首页” />

用CSS动态控制文本属性

星期三, 06月 4th, 2008

本篇详细介绍了用CSS动态控制文本属性de文章主题,利用CSSde属性值可动态改变de特点,定义文本de多种属性值,再用一个事件来触发,一旦事件发生,则改变文本属性值,从而达到预期目de.
用CSS可以很方便地动态改变文本de属性,从而可制作出动态地使文字变大、缩小、改变文字颜色、改变文本de背景、字间距、行间距等等网页特效,一切都在您de掌握之中.是不是有点玄?事实就是如此.那一定很复杂吧?不!看完本文,您就会明白,原来这么简单.
请看下面de示例:
一、动态改变文字大小
这个例子de效果是:一段文本,当鼠标在这段文本上,文字变大,鼠标离开时又恢复原样.
制作方法:
1、在Dreamweaver3中,用CSS面板定义两个CSSdeclass,一个取名为“style1”定义为大号字(18px);另一个取名为“style2”,定义为小号字(12px).获得deCSS相关代码如下:
<style type=”text/css”>
<!–
.style1 { font-size:18px}
.style2 { font-size:12px}
–>
</style>
不使用Dreamweaverde网友可把上述相关代码直接复制到网页相关代码de<head>与</head>之间.
2、 在这段文字de<P>标记中加入这段相关代码:onmouseover=”this.className=’’style1”” onmouseout= “this.className=’’style2””.至此,制作完成,能产生效果de那段文字de源相关代码是这样de:
<p onmouseover=”this.className=’’style1”” onmouseout=”this.className=’’style2””><font color=”#FF0000″>鼠标在这段文字上,文字变大,鼠标离开时变小.</font></p>
不使用Dreamweaverde网友只要把相关代码改成上面这样就行了,预览一下就可看到实际效果了.
二、同时动态地改变文字de大小、颜色、加粗
这个例子de效果是:鼠标在文字上,文字de大小、颜色发生改变且加粗,鼠标离开时恢复原样.
这个例子de制作方法与例一相同,不同de只是在CSS中定义了不同de文字属性,所以制作方法不再重复.在<head>与</head>之间增加deCSS相关代码为:
<style type=”text/css”>
<!–
.style1 { font: bold 16px ; color: #0000FF}
.style2 { font-size:12px; color:#00ff00}
–>
</style>
制作完成,能产生效果de那段文字de源相关代码是这样de:
<p class=”style4″ onmouseover=”this.className=’’style1”” onmouseout=”this.className=’’style2””>鼠标在这段文字上,改变文字de大小、颜色、加粗,鼠标离开时恢复原 样.</p>
三、动态改变部分文本de背景
这个例子de效果是:当鼠标移到某行文本上,这行一部分文本de背景改变了,而本行de另一段背景却不变.
这个例子与上面de例子在制作方法上有点改变,上面de例子都是对整段文本de属性进行改变,所以把触发事件加载在“P”标记上;而本例是只改变一段文本de一部分de背景颜色,所以应先用”Span”标记把要改变背景de文本括起来,然后把触发事件加载到“Span”标记上.
本例在<head>与</head>之间增加deCSS相关代码为:
<style type=”text/css”>
<!–
.style1 { background: #99CCFF}
.style2 { background: #FFFFFF}
–>
</style>
制作完成,能产生效果de那段文字de源相关代码是这样de:
<p><span class=”style6″ onmouseover=”this.className=’’style1”” onmouseout=”this.className=’’style1””>当鼠标移到这段文本上,背景改变了,</span>而本 行de另一段背景却不变.</p>
四、给超级链接动态加图标
这个例子de效果是:当鼠标移到某个超级链接上,它de左边会出现一个图象,鼠标移开,图象消失.
本例在制作方法上与上例相同,都是改变文本de背景,但在制作时要注意几点:
1、在设置CSSde背景时是选择图象背景,并在设置图象背景de“repeat”参数时要选择“no-repeat”(不平铺);
2、在设置超级链接时,在其左边要预留出图象de位置;
3、触发事件要加载在超级链接上.
本例在<head>与</head>之间增加deCSS相关代码为:
<style type=”text/css”>
<!–  
.style1 { background: url(image/dot.gif) no-repeat; }
.style2 { background: #FFFFFF}
–>
</style>
制作完成,能产生效果de那个超级链接de源相关代码是这样de:
<a href=”#” onmouseover=”this.className=’’style1”” onmouseout=”this.className=’’style2””>将鼠标移动过来</a>
通过动态改变文本deCSS属性,还可以做出许多特效,但方法基本相同,不再一一例举了,掌握了方法,您就可以发挥想象力去创作了.

alt属性和title属性

星期三, 06月 4th, 2008

作者:JunChen 2005-5-23 12:00:35
原文:http://www.456bereastreet.com/archive/200412/the_alt_and_title_attributes/
翻译:JunChen

首发:http://blog.handsbrain.com/junchen/archive/2005/05/21/3355.aspx
版权:本文版权归译者Junchen所有,转载请先联系译者.
当浏览器卖主扭曲了标准并且自顾自de不按规则去做一些事,他们可能会造成一些问题,或者至少产生了混淆.例子之一就是一些浏览器处理alt属性(一般会被错误de称作alt标签)de方式,比如拥有大量用户deWindowsdeIE浏览器.

替换文字(alt text)并不是用来做提示(tool tip),或者更加确切de说,它并不是为图片提供额外说明信息de.相反地,title属性才应该用来为元素提供额外说明信息.这些信息在大部分图像浏览器里显示为提示(tool tip),虽然制造商可以任意采取其他方式渲染title属性de文字.

很多人看来对这两个属性感到迷惑(最近这个问题在Web Standards Group邮件列表里变多了), 所以我写下我de想法,如何去用它们.

alt属性

为不能显示图像、窗体或appletsde用户代理(UA),alt属性用来指定替换文字.替换文字de语言由lang属性指定.
来源:How to specify alternate text.

Alt属性(注意是“属性”而不是“标签”)包括替换说明,对于图像和图像热点是必须de.它只能用在img、area和input元素中(包括applet元素).对于input元素,alt属性意在用来替换提交按钮de图片.比如:<input type=”image” src=”image.gif” alt=”Submit” />.

使用alt属性是为了给那些不能看到您文档中图像de浏览者提供文字说明.这包括那些使用本来就不支持图像显示或者图像显示被关闭de浏览器de用户,视觉障碍de用户和使用屏幕阅读器de用户.替换文字是用来替代图像而不是提供额外说明文字de.

在写替换文字前仔细想想,保证那些文字确实为那些看不到图像de人提供了说明信息,并且在上下文中有意义.对于那些装饰性de图片可以使用空de值(alt=”",引号中间没有空格),而不是使用不相关de替换文字比如“blue bullet”或者“spacer.gif”.不要忽略它,如果您忽略了,那么一些屏幕阅读器会直接阅读图像文件de文件名,那些文字浏览器,比如Lynx会显示图像文件de文件名,而那对于您de浏览者就没什么用了.

包含文字de图像图片设置替换文字是最简单de,图像中包含de文字一般来说就可以作为alt属性值.

至于替换文字de长度,看看WCAG 2.0(网站内容可用性指南2.0)是怎么说de:

Alt属性值得长度必须少于100个英文字符或者用户必须保证替换文字尽可能de短.
我把它理解为“尽可能短,尽需要长”.

即使您想让它显示为提示(tool tip),也不要给文字元素使用alt属性,这并不是它de用法.至今据我所知,那样做仅能在WindowsdeIE浏览器和古老deNetscape 4.*(windows版本)有效.没有一个Macde浏览器会将它显示为提示(tool tip).

当浏览器把替换文字显示为提示(tool tip)后,那些错误使用alt属性de行为也受到了鼓励.一些人开始写无意思de替换文字,因为他们趋向于认为它是一个额外de说明信息,而不是不能显示图像de替换.其他人可能不想让提示(tool tip)出现,然后就完全忽略了写alt属性值.这些错误de做法,都给那些不能看到图像de浏览者造成了困难.

额外de说明信息和非本质de信息请使用title属性.

title属性

title属性为设置该属性de元素提供建议性de信息.
来源: The title attribute.

title属性可以用在除了base,basefont,head,html,meta,param,script和title之外de所有标签.但是并不是必须de.可能这正是为什么很多人不明白何时使用它.

使用title属性提供非本质de额外信息.大部分de可视化浏览器在鼠标悬浮在特定元素上时显示title文字为提示信息(tool tip),然而这又由制造商来决定如何渲染title文字.一些浏览器会将title文字显示在状态栏里.比如早期版本deSafari浏览器.

title属性有一个很好de用途,即为链接添加描述性文字,特别是当连接本身并不是十分清楚de表达了链接de目de.这样就使得访问者知道那些链接将会带他们到什么地方,他们就不会加载一个可能完全不感兴趣de页面.另外一个潜在de应用就是为图像提供额外de说明信息,比如日期或者其他非本质de信息.

title属性值可以比alt属性值设置de更长.不过要注意de是,有些浏览器会截断过长de文字(比如工具提示或其他).比如Mozilla核心de浏览器只能显示最先de60个字符.这被认为是一个Mozilla bug,这是您要注意de.

使用前先考虑

我de建议是保证替换文字(alt text)精要.在大多数de应用里,都应该被留白,alt=”"(注意两引号中没有空格). 想想那些图像,为那些浏览者提供了什么样de信息,您应该用什么文字去描述它,或者您该为看不到图像de人提供什么信息? 将替换文字写成“照片:站在大楼外deCEO,穿着灰色西装和黑色领带,望着天”对于看不到图像de人真de有帮助?如果您觉得是,那么您就写吧.在很多情况下,我觉得让替换文字留白比较好.

对于title属性,比较难于给出严格de使用说明.我大部分用在那些不能自我释意de链接上,比如同一页面上de相同de链接文字,不同de链接页面.有时候也为一些按钮或者表单元素提供更多de说明文字.

更长de描述

当一个图片需要更加长de描述,而超过alt属性de限制,那么还有一些选择.

longdesc属性可以用来提供链接到一个包含图片文字描述de单独页面.这就意味着把浏览者链接到另外de页面,这可能会造成理解上de困难.另外浏览器对于longdesc属性de支持也是不一致de,并且不是非常好.

longdesc属性可以包含一个链接到当前文档de其他部分(锚点)来取代链接到另外de页面.在Accessibility footnotes, Andy Clarke很好de解释说明了如何应用.

描述链接(D links)可以用来补充longdesc.一个描述链接就是一个常规de链接,连接到含有替换文字de页面.该链接被置于图像de旁边,并且在所有浏览器中都是可是de.对于它de有效性人们有很多不同意见,我de个人意见不大喜欢这个注意.WCAG也是,在他们de工作草案HTML Techniques for WCAG 2.0中,描述链接是被“不赞成”de.

如果对图片de长de描述对于任何浏览者都有用,那么您得考虑让它简单de显示在同一个文档里面,而不是链接到其他页面里或者藏起来.这样每个人都可以阅读到.这是一种简单低技术含量de方法.

更多信息

想了解更多关于alt,title和longdesc属性?看这里:

Guidelines on alt texts in img elements
Writing good ALT text
Accessible alternatives
Accessibility footnotes
The image problem
Title Attribute – Your Take
Using link Titles to Help Users Predict Where They Are Going
How to specify alternate text
The title attribute

边框(border)边距(margin)和间隙(padding)属性的区别

星期三, 06月 4th, 2008

边框属性(border)用来设定一个元素de边线.
  边距属性(margin)是用来设置一个元素所占空间de边缘到相邻元素之间de距离.
  间隙属性(padding)是用来设置元素内容到元素边界de距离.
  这三个属性都属于CSS中box类型de属性.

  下面这个示意图,很形象地体现了三者之间de区别.

这里提供一张盒模型de3D示意图,希望便于您de理解和记忆.

ASP.NET中用healthMonitor属性用法

星期二, 06月 3rd, 2008

  在ASP.NET 2.0中,可以使用healthMonitoring属性监测事件.healthMonitoring属性是一个基于方法deprovider,在这里可以构造自己deprovider.利用healthMonitoring属性,我可以诸如记录错语、成功de事件等,对不同de数据源,如事件日志,Sql Server甚至对于自己通过继承WebEventProvider类创建自己deproviders.在此文章中,我打算介绍配置一个监测SqlServer错语de并且对某人de电子信箱地址发送邮件deweb应用程序.首先,看一下在web.config中dehealthMonitoring程序片段,在此可以建立将要用到de事件.

<healthMonitoring Enabled=”true|false” heartBeatInterval=”time interval”>
 <bufferModes>… </bufferModes>
 <providers>… </providers>
 <eventMappings>… </eventMappings>
 <profiles>… </profiles>
 <rules>… </rules>
</healthMonitoring>

  如果看一下<healthMonitoring>元素,就可以判断是否可以将设置属性为有效或无效,也可以指定对WebHeaderBeatEvent被唤醒de时间间隔.healthMonitoring有5个孩子.

  bufferModes,在此可以定义一个Providerde缓冲区大小.

  Providers,在此说明处理事件deProviders.

  eventMappings, 在此可以画出与友好事件类型相关de事件名称.

  profiles, 在此定义一个可以用来配置事件de参数集集合.

  rules, 在此画出Providersde事件图.

  可以阅读更多含在VS 2550文档中de关于这些元素de东西.

  在继续之前,这里有一份含ASP.NET中de一些Providers清单:

System.Web.Management.MailWebEventProvider
System.Web.Management.SimpleMailWebEventProvider
System.Web.Management.TemplatedMailWebEventProvider
System.Web.Management.TraceWebEventProvider
System.Web.Management.EventLogWebEventProvider
System.Web.Management.SqlWebEventProvider
System.Web.Management.WmiWebEventProvider

  不需要解释这些,名字告诉我它们是干什么de.还要提一下SqlWebEventProvider依靠Sql server而工作,它将事件存储在aspnet_Web_Event表.为了安装此数据库,必须运行位于framework文件夹中deaspnet_regsql.exe向导.

  现在,配置对Sql server provider有登录错语并且发送一个电子邮件而产生错误de程序.

  下面是一个使用SqlWebEventProvider和SimpleMailWebEventProvider来存错语事件de例子.

<healthMonitoring enabled=”true” heartBeatInterval=”0″>
<bufferModes>
<add name=”Critical Notification” maxBufferSize=”100″ maxFlushSize=”20″urgentFlushThreshold=”1″ regularFlushInterval=”Infinite” urgentFlushInterval=”00:01:00″ maxBufferThreads=”1″/>

<add name=”Analysis” maxBufferSize=”1000″ maxFlushSize=”100″ urgentFlushThreshold=”100″
regularFlushInterval=”00:05:00″ urgentFlushInterval=”00:01:00″ maxBufferThreads=”1″/>

</bufferModes>
<providers>

<add name=”CriticalMailEventProvider” type=”System.Web.Management.SimpleMailWebEventProvider, System.Web …” from=info@nsquared2.net to=fnormen@hotmail.com priority=”High” bodyHeader=”Warning!”
bodyFooter=”Please investigate ASAP.” subjectPrefix=”Action required.” buffer=”true” bufferMode=”Critical Notification” maxEventLength=”4096″ maxSize=”4096″ maxMessagesPerNotification=”1″/>

<add name=”SqlWebEventProvider” type=”System.Web.Management.SqlWebEventProvider, System.Web …”
connectionStringName=”LocalSqlServer” maxEventDetailsLength=”1073741823″ buffer=”true”
bufferMode=”Analysis”/>

</providers>

<eventMappings>

<add name=”All Errors” type=”System.Web.Management.WebBaseErrorEvent, System.Web …”/>
<add name=”Request Processing Errors” type=”System.Web.Management.WebRequestErrorEvent, System.Web …/>

</eventMappings>

<profiles>

<add name=”Default” minInstances=”1″ maxLimit=”Infinite” minInterval=”00:10:00″/>

</profiles>

<rules>

<add name=”All Errors Default” eventName=”All Errors” provider=”SqlWebEventProvider” profile=”Default”
minInterval=”00:00:30″/>

<add name=”Request Processing Errors” eventName=”Request Processing Errors” provider=”CriticalMailEventProvider” profile=”Default”/>

</rules>

</healthMonitoring>

  在此例子中,使用Sql provider来记录所有错语事件,并且当Web请求错误事件被唤醒时使用mail provider来发送一个消息.

  这里有一些ASP .NET 2.0一起发布de事件:

System.Web.Management.WebBaseEvent
System.Web.Management.WebHeartBeatEvent
System.Web.Management.WebApplicationLifetimeEvent
System.Web.Management.WebRequestEvent
System.Web.Management.WebBaseErrorEvent
System.Web.Management.WebErrorEvent
System.Web.Management.WebRequestErrorEvent
System.Web.Management.WebAuditEvent
System.Web.Management.WebFailureAuditEvent
System.Web.Management.WebSuccessAuditEvent
System.Web.Management.WebManagementEvent
System.Web.Management.WebViewStateFailureAuditEvent
System.Web.Management.WebAuthenticationFailureAuditEvent
System.Web.Management.WebAuthenticationSuccessAuditEvent

  可以使用这些事件来对一个provider画图.也可以创建通过WebBaseEvent类继承来de自己de事件.

  为自动唤醒一个事件,可以使用WebBaseEvent类de唤醒方法:

try
{
 //….
}

catch(Exception e)
{
 if (HealthMonitoringManager.Enabled)
 {
  WebBaseEvent.Raise(new WebErrorEvent(”My Error message”, null, 5000, e));
 }
}

or:

if (HealthMonitoringManager.Enabled)
{
 WebErrorEvent event = new WebErrorEvent(”My error message”, null, 5000, e);
 event.Raise();
}

ASP.NET 2.0服务器控件开发之复杂属性

星期二, 06月 3rd, 2008

在上一篇文章中,曾经提及“复杂属性”de概念.复杂属性de最大特征是属性de类型是本身具有属性(称为子属性)de类.通常情况下,复杂属性表现为3种形式:连字符形式属性、内部嵌套形式属性和内部嵌套形式默认属性.本文将介绍以上3种形式复杂属性de具体实现方法.

  1. 实现连字符形式复杂属性

  连字符形式属性是比较常见de复杂属性.我常用deFont属性就是一个复杂属性,其包括多个子属性,如Bold、Name等.这种类型属性具有两种语法格式:一种是利用连字符语法,在控件de开始标记中保存子属性,例如,Font-Bold,Font-Name.另外一种格式是在控件de标记中保存子属性,例如,<font Bold=”true” />.后者比前者de可读性强.

  实现连字符形式de复杂属性,必须对该复杂属性及其子属性实现设置指定de设计时元数据.下面首先列举了复杂属性实现过程中de相关元数据设置示例.请阅读下面de源相关代码.

public class CustomerControl:WebControl{
 [ DesignerSerializationVisibility( DesignerSerializationVisibility.Content), NotifyParentProperty(true) ]
 public SizeInfo Size { …… }
}
  如上相关代码所示,Size是一个复杂属性,其属性类型为SizeInfo(自定义类).在Size属性实现前设置了两个设计时元数据:DesignerSerializationVisibility和NotifyParentProperty.DesignerSerializationVisibility用于指定在设计时序列化组件上de属性时,所使用de持久性类型.其值设置为DesignerSerializationVisibility.Content枚举值,用于指定序列化程序应该序列化属性de内容即子属性,而不是Size属性本身,因为序列化Size没有任何意义.另外,还包括一个NotifyParentProperty(true)设置,它de作用是使得属性浏览器中对子属性de修改通知一直上传到对象模型,并在被修改了子属性de控件中产生修改通知.

  在完成了复杂属性de元数据设置后,开发人员还必须对子属性设置相关de设计时元数据.例如,Size包括两个子属性Height和Width,那么它们de实现相关代码应如下所示.

[TypeConverter(typeof(ExpandableObjectConverter))]public class SizeInfo{
 [ NotifyParentProperty(true) ]
 public UInt32 Height {……}
 [ NotifyParentProperty(true) ]
 public UInt32 Width {……}
}
  如上相关代码所示,子属性Height和Width分别被设置了元数据NotifyParentProperty(true).这样,当子属性发生修改时,.NET框架将自动产生修改通知,并且通知到父属性Size.另外,还有一个设计时特性TypeConverter(typeof(ExpandableObjectConverter)),它告诉属性浏览器提供扩展和折叠样式,这样控件开发者可以在属性浏览器中直接编辑子属性.

  以上介绍了声明连字符形式属性de方法.从中可以看出,在声明连字符属性过程中需要把握两个要点:一是复杂属性de设计时元数据设置;二是子属性de设计时特性设置.

  2. 实现内部嵌套形式复杂属性

  通常情况下,开发人员多实现连字符形式de复杂属性.然而,对复杂属性还可以实现内部嵌套de形式.下面de相关代码就是一个典型de内部潜逃形式复杂属性de应用.

<MyControl:CustomeControl id=”demo1″ runat=”server”>
<HeaderStyle ForeColor=”#FFFF00″ BackColor=”#99ff00″>
</HeaderStyle>
… …
</MyControl: CustomeControl>
  如上相关代码所示,自定义控件MyControlde属性HeaderStyle是一个典型de内部嵌套形式属性.实现这种形式de属性与实现连字符形式属性有很大不同,需要分为两种情况.

  如果自定义服务器控件类继承自Control类,那么必须在控件类之前设置元数据属性ParseChildren和PersistChildren.示意性相关代码如下所示.

[ParseChildren(true),PersistChildren(false)]
public class CustomeControl:Control{ ……}
  如上相关代码所示,在控件类前设置了两个元数据属性ParseChildren和PersistChildren.前者用于告知页面分析器把控件标记中de内容解析为属性还是子控件,该属性值设置为true,则表示解析为属性.后者用于告知设计器把控件标记中de内容保存为属性还是子控件,该属性值设置为false,表示保存为属性.

  如果自定义控件类继承自WebControl类,那么就不需要以上de元数据属性设置,因为,WebControl类已经应用了这些元数据属性了.

  无论自定义控件类继承自WebControl类还是Control类,为实现内部嵌套形式复杂属性,都必须在属性实现中设置如下元数据属性.

[ DesignerSerializationVisibility( DesignerSerializationVisibility.Content), NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty)]
public TableItemStyle HeaderStyle{……}
  由上面de相关代码可以看到,必须在实现复杂属性之前,应用3个元数据属性:DesignerSerializationVisibility、NotifyParentProperty和PersistenceMode.前两个元数据属性在前文中已经说明,第三个PersistenceMode用于指定如何将服务器控件属性或事件保持到ASP.NET页de元数据属性,该特性de值设置为枚举值:PersistenceMode.InnerProperty,这表示将所标识属性(HeaderStyle)保持为嵌套标记.

  以上介绍了内部嵌套形式属性声明de方法.总结起来分为两种情况:一是所开发控件从Control派生,则需要设置五个设计时特性ParseChildrenAttribute(true)、PersistChildren(false)、DesignerSerializationVisibility、NotifyParentProperty和PersistenceMode.前两个特性在控件类前设置,用于告诉编译器将控件标记内de内容为属性,需要解析为属性;后三个特性在属性前指定,用于指示编译器此属性为内部嵌套形式属性,在应用控件属性时,必须采用嵌套形式.二是所开发控件从WebControl派生,这种情况比较简单,只需设置上文中后3个设计时特性即可.

  3. 实现内部嵌套形式默认复杂属性

  内部嵌套形式默认属性与内部嵌套形式属性非常类似,它通常用于设置某个控件de集合属性.例如,标准服务器控件中deDataList、DropDownList控件中de属性均为内部嵌套形式默认属性.

  为了实现这种形式de属性,主要需设置两个元数据属性:一是在控件类前设置ParseChildren(true, “DefaultPropertyName”),指定该控件中嵌套de标记表示属性,而非子控件,同时将嵌套属性分析为该控件de集合属性;二是在集合属性前设置特性PersistenceMode(PersistenceMode.InnerDefaultProperty),表示将该属性定义为控件de默认属性.

  4. 小结

  本文介绍了创建复杂属性de实现方法.这是实现自定义服务器控件过程中de重点和难点内容.在随后de一篇文章中,我将通过示例来加深对复杂属性实现方法de认识.

利用文件属性结合Session实现在线人数统计

星期一, 06月 2nd, 2008

<?php
ob_start();
session_start();
$num=0;
$dirpt = “online”;
$reftime = 1;
if (is_dir($dirpt) && $dir = opendir($dirpt)) {
while (($file = readdir($dir)) !== false) {
if(strcmp($file,”..”)==0 || strcmp($file,”.”)==0){
continue;
}
$D_[date("Y-m-d H:i:s",filemtime($dirpt."/".$file))]=$file;
$num ;
unset($cum);
}
closedir($dir);
$filename = session_id();
$fp = fopen($dirpt.”/”.$filename,”w”);
fputs($fp,”");
fclose($fp);
$ntime = date(”Y-m-d H:i:s”,mktime(date(”H”),date(”i”)-1,0,date(”m”),date(”d”),date(”Y”)));
$D_[$ntime]=”-”;
krsort($D_);
$onlinenumber=0;
while(1){
$vkey=key($D_);
$onlinenumber ;
if(strcmp($ntime,$vkey)==0){
break;
}else{
array_shift($D_);
}
}
array_shift($D_);
reset($D_);
while(count($D_)>0){
$ckey=key($D_);
unlink($dirpt.”/”.$D_[$ckey]);
if(!next($D_)){
break;
}
}
}else{
@chmod(”..”,0777);
@mkdir($dirpt,0777);
}
$online=$onlinenumber-1;
$retime=60*$reftime;
echo “当前在线<strong><font color=red>$online</font></strong>人<meta http-equiv=refresh content=\”{$retime},url=\”>”;
ob_end_flush();
?>
<!–
《利用文件属性结合Session进行在线人数统计》
作者:sports98
编写日期: 2003-3-19
–>

第六节 访问属性和方法 [6]

星期一, 06月 2nd, 2008

一个对象实例de属性是变量,就像PHPde其他变量一样. 但是您必须使用->运算符来引用它们. 不需要在属性前使用美元符$. 例如, 6.1中打印User对象dename属性那一行.
可以联用->,如果一个对象de属性包含了一个对象,您可以使用两个->运算符来得到内部对象de属性. 您甚至可以用双重引用de字符串来放置这些表达式. 看6.5中de例子,对象House中de属性room包含了一组Room对象.
访问方法和访问属性类似. ->运算符用来指向实例de方法. 在例子6.1中调用getLastLogin就是. 方法执行起来和类外de函数几乎相同.
如果一个类从另一类中继承而来,父类中de属性和方法将在子类中都有效,即使在子类中没有声明. 像以前提到过de,继承是非常强大de. 如果您想访问一个继承de属性,您只需要像访问基类自己de属性那样引用即可,使用::运算符.

<?php
class Room
{
public $name;
function __construct($name=”unnamed”)
{
$this->name = $name;
}
}
class House
{
//array of rooms
public $room;
}
//create empty house
$home = new house;
//add some rooms
$home->room[] = new Room(”bedroom”);
$home->room[] = new Room(”kitchen”);
$home->room[] = new Room(”bathroom”);
//show the first room of the house
print($home->room[0]->name);
?>

PHP有两个特殊de命名空间:parent命名空间指向父类,self命名空间指向当前de类. 例子6.6中显示了如何用parent命名空间来调用父类中de构造函数. 同时也用self来在构造函数中调用另一个类方法.
<?php
class Animal file://动物
{
public $blood; file://热血or冷血属性
public $name;
public function __construct($blood, $name=NULL)
{
$this->blood = $blood;
if($name)
{
$this->name = $name;
}
}
}
class Mammal extends Animal file://哺乳动物
{
public $furColor; file://皮毛颜色
public $legs;
function __construct($furColor, $legs, $name=NULL)
{
parent::__construct(”warm”, $name);
$this->furColor = $furColor;
$this->legs = $legs;
}
}
class Dog extends Mammal
{
function __construct($furColor, $name)
{
parent::__construct($furColor, 4, $name);
self::bark();
}
function bark()
{
print(”$this->name says ‘woof!’”);
}
}
$d = new Dog(”Black and Tan”, “Angus”);
?>

第四节中介绍了如何调用函数. 对于对象de成员来是这样调用de:如果您需要在运行时确定变量de名称,您可以用$this->$Property这样de表达式. 如果您想调用方法,可以用$obj->$method().
您也可以用->运算符来返回一个函数de值,这在PHP以前de版本中是不允许de. 例如,您可以写一个像这样de表达式: $obj->getObject()->callMethod(). 这样避免了使用一个中间变量,也有助于实现某些设计模式,如Factory模式.

js资料prototype 属性

星期一, 06月 2nd, 2008

资料:prototype 属性
返回对象类型原型de引用.
objectName.prototype
objectName 参数是对象de名称.
说明
用 prototype 属性提供对象de类de一组基本功能.对象de新实例“继承”赋予该对象原型de操作.
例如,要为 Array 对象添加返回数组中最大元素值de方法.要完成这一点,声明该函数,将它加入 Array.prototype,并使用它.
[复制此相关代码]CODE:
function array_max( ){
var i, max = this[0];
for (i = 1; i < this.length; i )
{
if (max < this[i])
max = this[i];
}
return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );

该相关代码执行后,y 保存数组 x 中de最大值,或说 6.
所有 JScript 内部对象都有只读de prototype 属性.可以象该例中那样为原型添加功能,但该对象不能被赋予不同de原型.然而,用户定义de对象可以被赋给新de原型.
本语言参考中每个内部对象de方法和属性列表指出哪些是对象原型de部分,哪些不是.