Stephen Liu

深入浅出、事半功倍
posts - 180, comments - 756, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2014年1月8日

摘要: 1. call_user_func和call_user_func_array: 以上两个函数以不同的参数形式调用回调函数。见如下示例: $arg) { print "$arg\n"; }}myTest('hello','world','123456'); 运行结果如下:Stephens-Air:TestPhp$ php class_exist_test.php The number of args in myTest is 3The 0th arg is helloThe 1th arg is worldThe 2th arg阅读全文

posted @ 2014-01-08 09:22 Stephen_Liu 阅读(1665) 评论(5) 编辑

2014年1月6日

摘要: 1. interface_exists、class_exists、method_exists和property_exists: 顾名思义,从以上几个函数的命名便可以猜出几分他们的功能。我想这也是我随着对PHP的深入学习而越来越喜欢这门编程语言的原因了吧。下面先给出他们的原型声明和简短说明,更多的还是直接看例子代码吧。bool interface_exists (string $interface_name [, bool $autoload = true ]) 判断接口是否存在,第二个参数表示在查找时是否执行__autoload。bool class_exists (string $cla..阅读全文

posted @ 2014-01-06 09:23 Stephen_Liu 阅读(7799) 评论(0) 编辑

2014年1月4日

摘要: 1. namespace: 和C++中的名字空间很像,作用也一样,都是为了避免在引用较多第三方库时而带来的名字冲突问题。通过名字空间,即便两个class的名称相同,但是因为位于不同的名字空间内,他们仍然可以被精确定位和区分。第一次看到PHP的名字空间语法时,感觉和C++相比在语法上是非常非常相似的,然而在写点儿小例子做做实验的时候才发现,他们的差别还是很大的,为了避免以后忘记,所以这里特别将其记录了下来。见如下代码:getName(); if ($c->isUserDefined()) { $details .= "$name is user defined.\n";阅读全文

posted @ 2014-01-04 09:07 Stephen_Liu 阅读(3763) 评论(0) 编辑

2014年1月2日

摘要: 1. __toString: 当对象被打印时,如果该类定义了该方法,则打印该方法的返回值,否则将按照PHP的缺省行为输出打印结果。该方法类似于Java中的toString()。privateField = "This is a private Field.\n"; $this->publicField = "This is a public Field.\n"; } public function __get($property) { print "__get() is called.\n"; $method = "g阅读全文

posted @ 2014-01-02 08:53 Stephen_Liu 阅读(1949) 评论(1) 编辑

2013年12月31日

摘要: 1. __construct: 内置构造函数,在对象被创建时自动调用。见如下代码:arg1 = $arg1; $this->arg2 = $arg2; print "__construct is called...\n"; } public function printAttributes() { print '$arg1 = '.$this->arg1.' $arg2 = '.$this->arg2."\n"; }}$testObject = new ConstructTest("arg1&q阅读全文

posted @ 2013-12-31 08:56 Stephen_Liu 阅读(6148) 评论(2) 编辑

2013年9月30日

摘要: 一、“1-2-1”单列变宽布局: 对于变宽度的布局,首先要使内容的整体宽度随浏览器窗口宽度的变化而变化。因此中间的container容器中的左右两列的总宽度也会变化,这样就会产生不同的情况。这两列是按照一定的比例同时变化,还是一列固定,另一列变化。这两种都是很常用的布局方式。然而对于等比方式而言,相对比较简单,和我上一篇博客中1-2-1的布局方式非常类似,因此这里只是介绍一列固定另一列变宽的case。 在实际的应用中,只有单列宽度变化,而其它保持固定的布局可能会更加实用。一般在存在多个列的页面中,通常比较宽的一个列是用来放置内容的,而窄列放置链接、导航等内容,这些内容一般宽度是固定的,不...阅读全文

posted @ 2013-09-30 09:03 Stephen_Liu 阅读(7425) 评论(6) 编辑

2013年9月29日

摘要: 一、单列布局: 这是最简单的一种布局方式,之所以给出该示例,还是为了保证本篇博客的完整性。固定宽度布局 Page Header 这是一行文本,这里作为样例,显示在布局框中。 这是一行文本,这里作为样例,显示在布局框中。 Page Content 这是一行文本,这里作为样例,显示在布局框中。 这是一行文本,这里作为样例,显示在布局框中。 Page Footer 这是一行文本,这里作为样例,显示在布局框中。 从CSS代码可以看到,3个div的宽度都设置为固定值360像素,同时将m...阅读全文

posted @ 2013-09-29 09:12 Stephen_Liu 阅读(8783) 评论(3) 编辑

2013年9月23日

摘要: 相对定位 使用相对定位的盒子的位置常以标准流的排版方式为基础,然后使盒子相对于它在原本的标准位置偏移指定的距离。相对定位的盒子仍在标准流中,它后面的盒子仍以标准流方式对待它。 使用relative,即相对定位,除了将position属性设置为relative之外,还需要指定一定的偏移量,水平方向通过left或者right属性来指定,竖直方向通过top和bottom来指定。以下为后面实验的基准代码。position属性 Box-1 这是一个很简单的标准流方式的两层的盒子,页面的效果如下图:实验一:一个子块的情况 下面的CSS样式代码中的Box-1处,将pos...阅读全文

posted @ 2013-09-23 08:44 Stephen_Liu 阅读(8835) 评论(7) 编辑

2013年9月18日

摘要: 在标准流中,一个块级元素在水平方向会自动伸展,直到包含它的元素的边界;而在竖直方向和兄弟元素依次排列,不能并排。使用“浮动”方式后,块级元素的表现就会有所不同。 CSS中有一个float属性,默认为none,也就是标准流通常的情况。如果将float属性的值设置为left或right,元素就会向其父元素的左侧或右侧靠紧,同时默认情况下,盒子的宽度不在伸展,而是根据盒子里面的内容的宽度来确定。准备基础代码 浮动的性质比较复杂,这里先制作一个基础的页面,代码如下。后面一系列的实验将基于下面的代码为基础,并根据不同的知识点添加不同的新代码。 Box-1 ...阅读全文

posted @ 2013-09-18 09:00 Stephen_Liu 阅读(6449) 评论(6) 编辑

2013年1月8日

摘要: 之前已经发了三篇有关Protocol Buffer的技术博客,其中第一篇介绍了Protocol Buffer的语言规范,而后两篇则分别基于C++和Java给出了一些相对比较实用而又简单的示例。由于近期工作压力很大,因此对于是否继续写本篇博客也确实让我纠结了几天。但每每想到善终如始则无败事这句话时,最终的决定还是既然开始了,就要尽自己最大的努力去做,而不要留有丝毫的遗憾。 该篇Blog的内容将完全取自于Google的官方文档,只是为一些相对难以理解的技术点加入了适当的注解。但因技术能力有限,如解释有误,欢迎指正。 这是一篇让你对Protocol Buffer知其然亦知其所以然的文档,即便你在并.阅读全文

posted @ 2013-01-08 08:52 Stephen_Liu 阅读(12582) 评论(2) 编辑