1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP面向对象中类方法的两种类型:1、基本类型

作者:用户 来源:互联网 时间:2017-12-01 10:10:57

对象方法类型

PHP面向对象中类方法的两种类型:1、基本类型 - 摘要: 本文讲的是PHP面向对象中类方法的两种类型:1、基本类型, PHP面向对象中类方法的两种类型:1、基本类型,有需要的朋友可以参考下。 在PHP的世界里面,数据类型决定了代码的处理数据的方式。例如:字符串类型显示字符串数据并用字符串函数来处理这些数据;数学表达式中使用整形,测试表达式中使用布尔型,等

PHP面向对象中类方法的两种类型:1、基本类型,有需要的朋友可以参考下。


在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。

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象 , 方法 类型 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备
阿里云双11活动