Php 在用户定义函数中使用标志

Php 在用户定义函数中使用标志,php,Php,我创建了一个脚注函数。我想给用户一个选项,让他们的脚注显示为数字或字母。下面是调用函数的方法: newFootnote($text,"letters") newFootnote($text,"numbers") newFootnote($text,true) newFootnote($text,false) 如果使用bool,true可以使用数字,false可以使用字母。但是,我更喜欢使用以下格式:newFootnote(字母)或newFootnote(数字) 我知道内置函数有您case使用的

我创建了一个脚注函数。我想给用户一个选项,让他们的脚注显示为数字或字母。下面是调用函数的方法:

newFootnote($text,"letters")
newFootnote($text,"numbers")
newFootnote($text,true)
newFootnote($text,false)
如果使用bool,
true
可以使用数字,
false
可以使用字母。但是,我更喜欢使用以下格式:
newFootnote(字母)
newFootnote(数字)

我知道内置函数有您case使用的标志。例如,
preg\u match\u all
具有
preg\u OFFSET\u CAPTURE
preg\u PATTERN\u ORDER
,等等。是否可以在用户定义的函数中使用标志?

是,使用
定义()
来定义命名常量aka标志

define('NAMED', 'letters');
newFootnote($text, NAMED);
全球范围

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

在类中也可以使用。

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

  • 内置函数标志
  • PHP扩展函数标志
  • 用户定义的函数标志
作为一个内置php函数,您可以看到:

echo PREG_OFFSET_CAPTURE."<br>";// output 256
如果要隐藏常量定义和/或使其在程序中可用,则可以将其放入文件(理想情况下与函数定义一起),并在需要时将其包括在内,将该文件设为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 />";
     }
}

关于你的第二点,是的,当然这是真的,你需要将两个变量传递到我定义的函数中。我返回并添加了$text部分以澄清开头,但没有在后面修改我的示例。@glossy1我不知道“newFootnote”函数的逻辑细节,但上面的简化版本(编辑)有效。否则我看不出还有什么未完成的,我相信上面的方法可以很好地工作。我的问题是如何避免要求用户定义常量。我现在看到PHP中的内置函数在语言的核心中预定义了它们。这回答了我最初的问题。我知道你可以像你所说的那样预先定义它,但我的观点是,像PREG_OFFSET_CAPTURE这样的东西在使用之前是没有定义的。我想它们都必须由PHP的核心定义。。。对吗?没错,标志是由php定义的常量,它映射到一个数字。我知道您可以按照指示预先定义它,但我的观点是,像PREG_OFFSET_CAPTURE这样的东西在使用之前是不会定义的。我想它们都必须由PHP的核心定义。。。对,对。在不同的层次上定义了预定义的常量:核心、扩展、框架等等。这些注释回答了我最初的问题。你的回答不正确。然而,既然你是回答这个问题的人(尽管是在评论中),我会把答案标记为正确的。非常感谢。这不是一个重复的问题。。。这是完全不同的。在这个问题上,他们实际上是在定义常数。我问的是如何为未定义的常量传递标志,因为标志被传递给内置函数,如preg_match_all等。。。
newFootnote($text,LETTER);//or
newFootnote($text,NUMBER);
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