HY,
以下代码不会像预期的那样抛出异常
<?php
class propertyObject {
private $_properties = array('name' => null , 'dateofBirth' => null);
function _get($propertyName)
{
if(!array_key_exists($propertyName, $this->_properties))
{
throw new Exception("Invalid Property Value");
}
if(method_exists($this,'get'.$propertyName))
{
return call_user_func(array($this, 'get'.$propertyName));
}
else
{
return $this->_properties[$propertyName];
}
}
function _set($propertyName, $value)
{
if(!array_key_exists($propertyName, $this->_properties))
{
throw new Exception("The property value you are trying to set is not valid");
}
if(method_exists($this, 'set'.$propertyName))
{
return call_user_func(array($this,'set'.$propertyName));
}
else
{
return $this->_properties[$propertyName]=$value;
}
}
function setdateofBirth($dob)
{
if(strtotime($dob) == -1)
{
throw new Exception ("Invalid Date of Birth. Please enter a value date");
}
$this->_properties['dateofBirth']=$dob;
}
function sayHello()
{
echo "Hello! My name is $this->name and my D.O.B is $this->dateofBirth";
}
}
?>
以上内容保存为class.propertyObject.php,然后从另一个文件test.php中调用。 test.php的代码如下:
<?php
include('class.propertyObject.php');
$newObj = new propertyObject();
$newObj->name='Ryann';
$newObj->dateofbirth='08/01/2009';
$newObj->sayHello();
$newObj->dateofBirth='hello';
?>
输出是:你好!我叫Ryann,我的D.O.B是08/01/2009。
在我看来,最后一句话$ newObj-&gt; dateofBirth ='hello';应抛出异常,因此应显示错误消息,但不会发出任何错误。此外,我更改了以下$ newObj-&gt; dateofbirth = '08 / 01/2009'中的值;到一个字符串名称,如约翰,它输出:你好!我叫Ryann,我的D.O.B是约翰。为什么没有为最后一个语句显示异常消息,或者为什么函数setdateofBirth($ dob)在非日期字符串值设置为$ dob时不会抛出任何异常。
答案 0 :(得分:1)
不知道是否是格式化,但你正在使用
_set() and _get()
而不是
__set() and __get()
所以php只为你的对象创建一个新的属性dateOfBirth,甚至从未触及你的$ _properties数组......
答案 1 :(得分:0)
strtotime的文档说明了这个
返回成功时间戳,FALSE 除此以外。在PHP 5.1.0之前,这个 函数在失败时返回-1。
所以我猜你使用的是大于5.1的PHP版本。只需检查strtotime的返回值为false,而不是-1。