PHP面向对象中类方法的两种类型:1、基本类型
来源:互联网 发布:拼音记单词软件 编辑:程序博客网 时间:2024/06/17 09:13
在PHP的世界里面,数据类型决定了代码的处理数据的方式。例如:字符串类型显示字符串数据并用字符串函数来处理这些数据;数学表达式中使用整形,测试表达式中使用布尔型,等等。这些都称为“基本数据类型”;
从更高层次上来说,每个类都定义了一种数据类型,如下面的一个类:
class test{ // ...}
这里的test类也属于一个数据类型(这跟C#基本上是一样的)。
在这篇博客中,我们将会讨论PHP类方法中的两种类型:基本类型和对象类型。
基本类型:
C#作为一个强类型语言,必须在变量赋值前声明变量的类型,并且变量的值也必须是规定的类型。而PHP是一个弱类型语言,变量并不需要声明为特定的数据类型,PHP会根据需要自动检测。当然我们可以自动检测,is_bool(),is_integer(),is_array()等函数就是检测类型的函数。作为弱类型语言,PHP既有自身的优势,也有不足的地方。
看下面这个例子(随身带个栗子。。。)
//定义一个书的类class Book{ public $title; public $author; //构造函数 function __construct($title,$author){ $this->title = $title; $this->author = $author; } public function getInfo($bool){ $str = "书名:".$this->title; //如果true,把作者的名字打出来 if($bool){ $str .= "作者:".$this->author; } return $str; }}$book = new Book("PHP从入门到精通","LSGO实验室.著");$bool = "false";$info = $book->getInfo($bool);print($info);//结果返回的是:/*书名:PHP从入门到精通作者:LSGO实验室.著*/
可见,代码并没有按照我们的期望执行,getInfo()函数参数类型本应该是Bool类型的,我们传过去的是一个字符串,按常理,PHP应该会自动解析的呀!
事实上,字符串“false”在测试中解析为“true”了,这是因为PHP在测试变量的时候会转换一个非空字符串值为布尔值true。
因此有
if("false"){ //...}
等价于
if(true){ //...}
解决方案:
1、使getInfo()方法更加宽松,而不只是仅仅接受bool值
public function getInfo($bool){ //假如$bool是字符串的时候,我们也应该进行处理 if(is_string($bool)){ //$bool = ($bool=="false") ? false : true; $bool = preg_match("/false|no|off/i",$bool) ? false : true; } $str = "书名:".$this->title."<br/>"; if($bool){ $str .= "作者:".$this->author; } return $str; }
2、不改动getInfo()函数,添加注释,使其他使用到这个类的程序员更容易的理解代码
/** *函数功能:返回书本信息 *参数列表:bool 是否返回作者信息 */public function getInfo($bool){ $str = "书名:".$this->title; //如果true,把作者的名字打出来 if($bool){ $str .= "作者:".$this->author; } return $str;}
3、让getInfo()函数严格检查参数的数据类型
public function getInfo($bool){ if(!is_bool($bool)){ die("参数类型要求是bool类型!!"); } $str = "书名:".$this->title; //如果true,把作者的名字打出来 if($bool){ $str .= "作者:".$this->author; } return $str;}
事实上,采用哪种处理参数类型的策略,取决于任何潜在bug的严重程度。通常PHP会根据语境自定转换大多数的基本数据类型。但是我们在实际开发中应该保持良好的习惯,要明白某个变量应该属于哪种类型的。我们不能单单依靠PHP内在的转换机制来防止类型相关的bug。
- PHP面向对象中类方法的两种类型:1、基本类型
- PHP面向对象中类方法的两种类型:2、对象类型(获得提示)
- 浅析JavaScript中两种类型的全局对象/函数
- 类中方法的三种类型
- Java面向对象-基本类型包装类
- Java面向对象,基本类型包装类
- PHP面向对象编程 面向对象的基本实践
- PHP面向对象的基本学习
- Scala 中当方法不需要接受参数时可定义成两种类型的方法
- C#的两种类据类型:类和结构体
- PHP中应用面向对象方法
- PHP面向对象中魔术方法使用
- java学习日记_23:面向对象之对两种类的赋值方式的比较
- 面向对象的系统分析(三)-面向对象分析基本方法
- PHP面向对象及类、方法的学习心得
- PHP面向对象的编程(类成员方法用法)
- PHP 面向对象的方法重载
- PHP 面向对象的方法重载
- Android---flipper实现图片轮播
- dhtmlxGrid组件学习一
- Java语言基础之集合乱舞Step2
- kafka java 生产消费demo
- 关于 USB 通信阻抗匹配的问题
- PHP面向对象中类方法的两种类型:1、基本类型
- 今天终于把机器学习基石看完了,后面还有机器学习技术===
- android studio自动生成ID插件
- JAVA验证码登录实现类
- sipXecs项目历史
- Junit使用教程(四)
- 101 方向和区域监测
- GDB调试各功能总结
- R高性能编程——互动出版网