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 只读属性

在泛型方法中返回特定类型,具体取决于运行时没有反射或动态的枚举值

java枚举方面的问题,见问题补充

为啥 c# 或 c++ 不能根据返回类型区分方法? [复制]

为啥我的查询没有返回枚举数组

java - 通用返回类型? [复制]