【问题标题】:Using flags in user-defined function [duplicate]在用户定义的函数中使用标志 [重复]
【发布时间】:2017-05-20 00:14:33
【问题描述】:

我创建了一个脚注函数。我想让用户选择让他们的脚注显示为数字或字母。以下是我如何调用该函数:

newFootnote($text,"letters")
newFootnote($text,"numbers")
newFootnote($text,true)
newFootnote($text,false)

如果使用 bool,true 可以使用数字,false 可以使用字母。但是,我更喜欢使用以下格式:newFootnote(LETTER)newFootnote(NUMBER)

我知道内置函数有你使用的标志。例如preg_match_allPREG_OFFSET_CAPTUREPREG_PATTERN_ORDER等。是否可以在用户定义的函数中使用标志?

【问题讨论】:

  • 这不是一个重复的问题,如所示......这是完全不同的。在那个问题中,他们实际上是在定义常数。我在问如何为未定义的常量传递标志,因为标志被传递给 preg_match_all 等内置函数......

标签: php


【解决方案1】:

对于全局范围

define('NUMBERS',true);
define('LETTERS',false);

在课程中你也可以使用class constants

【讨论】:

  • 我知道您可以按照您的指示预先定义它,但我的意思是 PREG_OFFSET_CAPTURE 之类的东西在使用之前没有定义。我猜它们都必须由 PHP 的核心定义......对吧?
  • 对。有预定义常量定义在不同级别:核心、扩展、框架等。
  • 该评论回答了我最初的问题。你的回答没有。但是,由于您是回答问题的人(尽管是在评论中),所以我会将答案标记为正确。非常感谢。
【解决方案2】:

是的,使用define() 来定义一个命名常量,也就是标志

define('NAMED', 'letters');
newFootnote($text, NAMED);

【讨论】:

  • 我知道您可以按照您的指示预先定义它,但我的意思是 PREG_OFFSET_CAPTURE 之类的东西在使用之前没有定义。我猜它们都必须由 PHP 的核心定义......对吧?
  • 正确,标志是 php 定义的映射到数字的常量
【解决方案3】:

简短回答:是的,可以在用户定义的函数中使用标志。 简而言之,A 标志的用例有以下三种:

  • 内置函数标志
  • 一个 PHP 扩展函数标志
  • 用户定义的函数标志

一个内置的php函数,可以看到:

echo PREG_OFFSET_CAPTURE."<br>";// output 256

一个 php 扩展,安装后,你可以使用它的常量,就好像它们是核心 php 函数标志一样,

如果您想为自己的函数定义自己的标志,您可以:

define ("LETTER", "letters");
define ("NUMBER", "numbers");

function newFootnote($text,$flag){
     if ($flag==NUMBER){
         // code to display foot notes as numbers 
        echo "The numbers are :$text <br />";
     }elseif($flag==LETTER){
         //  code to display foot notes as letters
        echo "The letters are :$text <br />";
     }else{
         // choose between a default behavior, or rising an error
        echo "error   <br />";
     }
}
newFootnote (" some random text to test", NUMBER); // output The numbers are : some random text to test 
newFootnote (" some random text to test", LETTER); // output The letters are : some random text to test
newFootnote (" some random text to test",NULL); // error 

但是,我更喜欢使用以下格式:newFootnote(LETTER) 或 newFootnote(NUMBER)

实际上你不能这样调用它,因为你必须提供第一个参数是 $text,你会这样调用它:

newFootnote($text,LETTER);//or
newFootnote($text,NUMBER);

如果你想隐藏常量定义和/或让它们在你的程序中可用,那么你可以将它们放在一个文件中(最好是函数定义)并在需要时包含它,让那个文件成为 notesFunctions.php,把在里面:

define ("LETTER", "letters");
define ("NUMBER", "numbers");

function newFootnote($text,$flag){
     if ($flag==NUMBER){
         // code to display foot notes as numbers 
        echo "The numbers are :$text <br />";
     }elseif($flag==LETTER){
         //  code to display foot notes as letters
        echo "The letters are :$text <br />";
     }else{
         // choose between a default behavior, or rising an error
        echo "error   <br />";
     }
}

然后在你的程序中,根据文件的位置(这里假设它们在同一个文件夹中),你把:

include ("notesFunctions.php");
/* then you call your function as needed and the output still be the same as 
before */
    newFootnote (" some random text to test", NUMBER); // output The numbers are : some random text to test 
    newFootnote (" some random text to test", LETTER); // output The letters are : some random text to test
    newFootnote (" some random text to test",NULL); // error

【讨论】:

  • 第二点,是的,当然,您需要将两个变量传递给我定义的函数。我回去并添加了 $text 部分以澄清开头,但后来没有修复我的示例。
  • @theglossy1 我不知道“newFootnote”函数的逻辑细节,但上面的简单版本(编辑)有效。否则我看不到还有什么未修复
  • 我确信上述方法可以正常工作。我的问题是如何避免要求用户定义常量。我现在看到 PHP 中的内置函数在语言的核心中预定义了它们。这回答了我最初的问题。
猜你喜欢
  • 2012-06-29
  • 2012-09-14
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多