我有一个可以返回FALSE的PHP类。
由于一些奇怪的原因,我无法检测到FALSE返回。 我可以毫无困难地检测到任何其他返回值。
愚蠢的版本......
error_reporting(E_ALL);
ini_set("display_errors", 1);
$run = new myClass();//class returns false
$response = $run->myMethod();
我已经测试了以下......
!$response
!isset($response)
empty($response)
$response == false
$response === false
对于我熟悉的任何条件,我都无法得到任何反应。
如果我将返回值设置为1或ANYTHING而不是false,则$ response将包含类返回的内容。 这不是我的第一天。 (这是我的第二次)。
我使用return false;经常,直到今天都没有遇到任何麻烦。
当然,我可以通过返回类似'wtf'的东西并测试这个条件来解决这个问题,但我真的想弄清楚我在这里缺少什么。
感谢任何想法。
答案 0 :(得分:2)
当你创建一个类的实例时,它将始终返回一个对象,而不是返回构造。
<?php
class SomeClass
{
// construct function that will always return false
public function __construct()
{
return false;
}
}
class TestClass extends PHPUnit_Framework_TestCase
{
public function testReturn()
{
// check if this code returns false
$this->assertFalse(new SomeClass);
}
public function testAssert()
{
// Checks if the object return is actually of SomeClass
$this->assertInstanceOf('SomeClass', new SomeClass);
}
public function testReturnOfConstruct()
{
//checks the return of the construct
$object = new SomeClass;
$this->assertFalse($object->__construct());
}
}
返回phpunit
phpunit --debug test3.php
PHPUnit 3.7.28 by Sebastian Bergmann.
Starting test 'TestClass::testReturn'.
F
Starting test 'TestClass::testAssert'.
.
Starting test 'TestClass::testReturnOfConstruct'.
.
Time: 7 ms, Memory: 5.25Mb
There was 1 failure:
1) TestClass::testReturn
Failed asserting that SomeClass Object () is false.
/var/www/test3.php:14
FAILURES!
Tests: 3, Assertions: 3, Failures: 1.
答案 1 :(得分:1)
您是否尝试在public function __construct()
或public function MyClass()
*内返回false?这不起作用,因为new MyClass()
调用将触发PHP错误,或返回MyClass
的实例,它永远不会评估为false,因为它是一个对象的实例,因此不是假的。
如果您的类不需要实例化为函数,您可以创建一个静态方法来执行您尝试运行的逻辑,如下所示:
<?php
class MyClass
{
const COLOUR_BLUE = 'blue';
public static function isSkyBlue()
{
if (isset($_POST['sky']) && $_POST['sky'] == self::COLOUR_BLUE) {
return true;
} else {
return false;
}
}
}
// Call doThings() statically to get its value
$response = MyClass::isSkyBlue();
if ($response === false) {
// Your logic goes here
}
或者,如果在执行逻辑之前将内容传递给构造函数,则可以执行以下操作:
<?php
class MyClass
{
const COLOUR_BLUE = 'blue';
protected $otherObject = null;
public function __construct($otherObject)
{
$this->otherObject = $otherObject;
}
public function isSkyBlue()
{
if ($this->otherObject->sky == self::COLOUR_BLUE) {
return true;
} else {
return false;
}
}
}
// Call doThings() statically to get its value
$response = new MyClass($otherObject)
if ($response->isSkyBlue() === false) {
// Your logic goes here
}
*
请注意,您的构造函数应始终调用__construct()
,因为自PHP 5起,不推荐使用构造函数的类名。
答案 2 :(得分:0)
如果您使用的是构造函数,它将不会返回任何内容......它不是正常的函数