Php 是否可以在默认情况下使对象返回false?
我以前试过问这个问题,但把问题搞砸了,所以我会再试一次。当放入if语句时,是否可能在默认情况下使对象返回false?我想要的是:Php 是否可以在默认情况下使对象返回false?,php,if-statement,boolean-expression,Php,If Statement,Boolean Expression,我以前试过问这个问题,但把问题搞砸了,所以我会再试一次。当放入if语句时,是否可能在默认情况下使对象返回false?我想要的是: $dog = new DogObject(); if($dog) { return "This is bad;" } else { return "Excellent! $dog was false!" } 这有可能吗?这不是完全必要的,但可以为我节省一些代码行。谢谢 在“if语句”中添加某些内容只是将其中的变量作为布尔值进行求值 在您的示例中,$do
$dog = new DogObject();
if($dog)
{
return "This is bad;"
}
else
{
return "Excellent! $dog was false!"
}
这有可能吗?这不是完全必要的,但可以为我节省一些代码行。谢谢 在“if语句”中添加某些内容只是将其中的变量作为布尔值进行求值
在您的示例中,$dog必须始终为false才能起作用。无法判断变量何时将在布尔表达式中求值
你在这里的最终目的是什么?您试图保存哪些代码行?在“if语句”中添加某些内容只是将其中的变量作为布尔值进行计算
在您的示例中,$dog必须始终为false才能起作用。无法判断变量何时将在布尔表达式中求值
你在这里的最终目的是什么?您要保存哪些代码行?我不确定对象本身。可能的您可以尝试类似的方法,向DogObject类添加公共属性,然后将其默认设置为false。比如
class DogObject
{
var $isValid = false;
public function IsValid()
{
return $isValid;
}
}
然后,当您实例化它时,它默认为false
$dog = new DogObject();
if($dog->IsValid())
{
return "This is bad;"
}
else
{
return "Excellent! $dog was false!"
}
只是想一想。我不确定这个物体本身。可能的您可以尝试类似的方法,向DogObject类添加公共属性,然后将其默认设置为false。比如
class DogObject
{
var $isValid = false;
public function IsValid()
{
return $isValid;
}
}
然后,当您实例化它时,它默认为false
$dog = new DogObject();
if($dog->IsValid())
{
return "This is bad;"
}
else
{
return "Excellent! $dog was false!"
}
只是想一想。如果我理解你的要求,我想你想这样做:
if (!$dog){
return "$dog was false";
}
这个!意思是不。所以你可以读到,“如果不是狗,或者如果狗不是真的”如果我理解你的要求,我想你应该这样做:
if (!$dog){
return "$dog was false";
}
这个!意思是不。所以你可以读到,“如果不是狗,或者如果狗不是真的”在什么条件下你希望
If($dog)
计算为假?你不能按字面上的要求去做,但也许条件可以被你想要的东西所取代。在什么条件下你想让if($dog)计算为false?你不能按字面上的要求去做,但也许条件式可以被你想要的东西所取代。像下面的C#那样使用隐式Cast操作符怎么样
像这样:
class DogObject
{
public static implicit operator bool(DogObject a)
{
return false;
}
}
然后你可以去
var dog = new DogObject();
if(!dog)
{
Console.WriteLine("dog was false");
}
使用隐式Cast操作符(如下面的C#)怎么样 像这样:
class DogObject
{
public static implicit operator bool(DogObject a)
{
return false;
}
}
然后你可以去
var dog = new DogObject();
if(!dog)
{
Console.WriteLine("dog was false");
}
不,PHP不支持运算符重载。也许他们会在将来的版本中添加它。不,PHP不支持运算符重载。也许他们会在未来的版本中添加它
class UserController
{
public function newuserAction()
{
$userModel = new UserModel();
if ($userModel->insertUser()) {
// Success!
} else {
die($userModel->getError());
}
}
}
或
处理错误的方法有一百万种。这完全取决于错误的复杂性和恢复选项的数量
或
处理错误的方法有一百万种。这完全取决于错误的复杂性和恢复选项的数量 使用instanceof关键字 比如说
$result = Users->insertNewUser();
if($result instanceof MyErrorClass){
(CHECK WHAT WENT WRONG AND SAY WHY)
} else {
//Go on about our business because everything worked.
}
使用instanceof关键字 比如说
$result = Users->insertNewUser();
if($result instanceof MyErrorClass){
(CHECK WHAT WENT WRONG AND SAY WHY)
} else {
//Go on about our business because everything worked.
}
用这个吗?这不是一个真正简洁的解决方案,但能满足您的需求:
<?php
class Foo
{
private $valid = false;
public function Bar ( )
{
// Do stuff
}
public function __toString ( )
{
return ( $this -> valid ) ? '1' : '0';
}
}
?>
零被认为是假的,一个被PHP认为是真的使用这个?这不是一个真正简洁的解决方案,但能满足您的需求:
<?php
class Foo
{
private $valid = false;
public function Bar ( )
{
// Do stuff
}
public function __toString ( )
{
return ( $this -> valid ) ? '1' : '0';
}
}
?>
零被认为是错误的,一被PHP认为是正确的。我自己也在尝试这样做,并找到了一个似乎可行的解决方案 对于其他试图回答问题的人,我会告诉提问者使用不同的解决方案,我也会尝试解释问题的原因。无论是原始海报还是我都不想使用异常,因为重点不是使用异常处理特性,而是将此负担放在我们使用此类的任何代码上。至少对我来说,关键是能够在其他PHP代码中无缝地使用这个类,这些代码可能是以非面向对象或非基于异常的风格编写的。许多内置PHP函数的编写方式都会导致不成功进程的结果为false。同时,我们可能希望能够在自己的代码中以特殊的方式处理这个对象 例如,我们可能希望执行以下操作:
if ( !($goodObject = ObjectFactory::getObject($objectType)) ) {
// if $objectType was not something ObjectFactory could handle, it
// might return a Special Case object such as FalseObject below
// (see Patterns of Enterprise Application Architecture)
// in order to indicate something went wrong.
// (Because it is easy to do it this way.)
//
// FalseObject could have methods for displaying error information.
}
这是一个非常简单的实现。
class FalseObject {
public function __toString() {
// return an empty string that in PHP evaluates to false
return '';
}
}
$false = new FalseObject();
if ( $false ) {
print $false . ' is false.';
} else {
print $false . ' is true.';
}
print '<br />';
if ( !$false ) {
print $false . ' is really true.';
} else {
print $false . ' is really false.';
}
一个稍微有趣的实现可能是:
class FalseException extends Exception {
final public function __toString() {
return '';
}
}
class CustomException extends FalseException { }
$false = new CustomException('Something went wrong.');
使用与以前相同的测试代码,$false的计算结果为false。我自己也在尝试这样做,并找到了一个似乎可行的解决方案 对于其他试图回答问题的人,我会告诉提问者使用不同的解决方案,我也会尝试解释问题的原因。无论是原始海报还是我都不想使用异常,因为重点不是使用异常处理特性,而是将此负担放在我们使用此类的任何代码上。至少对我来说,关键是能够在其他PHP代码中无缝地使用这个类,这些代码可能是以非面向对象或非基于异常的风格编写的。许多内置PHP函数的编写方式都会导致不成功进程的结果为false。同时,我们可能希望能够在自己的代码中以特殊的方式处理这个对象 例如,我们可能希望执行以下操作:
if ( !($goodObject = ObjectFactory::getObject($objectType)) ) {
// if $objectType was not something ObjectFactory could handle, it
// might return a Special Case object such as FalseObject below
// (see Patterns of Enterprise Application Architecture)
// in order to indicate something went wrong.
// (Because it is easy to do it this way.)
//
// FalseObject could have methods for displaying error information.
}
这是一个非常简单的实现。
class FalseObject {
public function __toString() {
// return an empty string that in PHP evaluates to false
return '';
}
}
$false = new FalseObject();
if ( $false ) {
print $false . ' is false.';
} else {
print $false . ' is true.';
}
print '<br />';
if ( !$false ) {
print $false . ' is really true.';
} else {
print $false . ' is really false.';
}
一个稍微有趣的实现可能是:
class FalseException extends Exception {
final public function __toString() {
return '';
}
}
class CustomException extends FalseException { }
$false = new CustomException('Something went wrong.');
使用与以前相同的测试代码,$false计算为false。我最近不得不使用null对象模式做类似的事情。不幸的是,null对象返回true,并且所讨论的变量有时是实际的null值(来自函数的默认参数)。我想到的最好的方法是if((string)$var){尽管这对空数组不起作用