注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

PHP中的两个“小问题”(为什么 0=='A' 父类子类属性权限定义问题)  

2013-10-01 00:41:11|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1 为什么 0=='a'
   下面的几个IF判断语句中,哪几个是True?

<?php
if(0==='a')
{
echo "0==='a'<br/>";
}
if(0=='a')
{
echo "0=='a'<br/>";
}


if('0'=='a')
{
echo "'0'=='a'<br/>";
}


if(0=='a1')
{
echo "0=='a1'<br/>";
}

if(111=='111a')
{
echo "111=='111a'";
}

仔细读了手册,你就知道答案了:
1)  如果比较一个数字和字符串,则字符串会被转换为数值并且比较按照数值来进行。
2)  如果比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。
3) 此规则也适用于 switch 语句。
关于字符串转为数值,当一个字符串被当作一个数值来取值,其结果和类型如下:
    1)如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。       2)其它所有情况下都被作为 float 来取值。
 该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

需要注意的是:当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对!
现在以上输出:

0=='a'
0=='a1'
111=='111a'

想一想?

0=='0' 0=='a' 那么为何'0'=='a' 这个等式不成立?!



2  父类子类属性权限定义问题
(注意不是访问控制)

同一方法名,当父类方法申明为public, 子类方法不能申明为protected,private 可以为 final


同一方法名,当父类方法申明为protected, 子类方法不能申明为private 可以为 public,protected final


同一方法名,当父类方法申明为private, 子类方法可以申明为 public,protected private final
(注意与访问区别开)

(注final: 如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。)

发现规律了吗?写几个类试试。
另外需要注意的是:

如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。


更多:http://fc-lamp.blog.163.com/blog/static/17456668720107102490948/
  评论这张
 
阅读(290)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017