php 返回类型或枚举? [复制]
Posted
技术标签:
【中文标题】php 返回类型或枚举? [复制]【英文标题】:php return types or enums? [duplicate] 【发布时间】:2012-04-14 02:09:23 【问题描述】:我正在使用 Codeignitor 进行编程并来自 c#。 它看起来像一个新手问题,但我想做这样的事情。
我有一些函数会返回一些值:
例子:
function Create_db()
//do something
if (PassWordError) //some errors here it is password incorrect
return "PASS_ERROR";
在某些地方我是这样使用的
$result = Create_db(); //assume that there are some problems and returned "PASS_ERROR"
所以$result
现在是字符串,
php 中有没有类似 ENUMS 的东西?或者类似的东西?
这样我就可以做这样的事情:
if (passWordError)
return $error->PasswordError();
我假设我也可以有一些其他类型
喜欢
Maximum_name_error,authenticationFailedError
等
谢谢。
【问题讨论】:
【参考方案1】:在 CI 中处理这个问题的一个好方法是使用语言类 - http://codeigniter.com/user_guide/libraries/language.html
语言文件:
$lang = array (
'password_error' => 'The password you entered is incorrect.',
....
)
控制器:
if ($PassWordError) //some errors here it is password incorrect
return $this->lang->line('password_error');
【讨论】:
【参考方案2】:IMO,当出现问题时,您应该抛出一个自定义(或不)异常,并在您的应用程序中使用异常处理程序来管理它。
if (passWordError)
throw new BadPasswordExeption($params, $you, $need);
然后你可以用 try catch 块包围它。
您可以在这里找到更多信息:http://php.net/manual/en/language.exceptions.extending.php
【讨论】:
是的...但情况不同,几乎所有的回报都不例外:)【参考方案3】:在 PHP 中执行此操作的典型方法是使用类常量:
class Something
const ERR_HI = 'hi';
const ERR_FOOBAR = 'foobar';
//to use:
return Something::ERR_FOOBAR;
虽然我会考虑改用异常。
【讨论】:
如果您可以轻松地进行逻辑检查,那么用户输入无效密码真的是一种特殊情况吗? 非常感谢,也欢迎例外,但const
更可取。
@CharlesSprayberry 你是对的,这取决于具体情况。然而,看起来他有一个初始化数据库的例程,并假设你的配置密码无效,所以看起来你可能想在这种情况下抛出。
@JaniHartikainen define
怎么样?我在 codeignitor 上使用了 constant.php 配置文件,这样我就可以在整个站点中使用它。
@DileepDil 我想你也可以使用定义。如果返回值特定于某个类,我可能会使用类常量,但如果你有某种共享的返回值或其他东西,那么是的。以上是关于php 返回类型或枚举? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
PHPPHP 8.1 的新特性一览 | 交叉类型枚举never 返回类型Fibers 纤程readonly 只读属性
在泛型方法中返回特定类型,具体取决于运行时没有反射或动态的枚举值