GVKun编程网logo

在 PHP 中的函数内使用全局 $foo 与使用 $GLOBALS['foo'](php提供的三种在函数内使用全局变量的方式)

1

对于想了解在PHP中的函数内使用全局$foo与使用$GLOBALS['foo']的读者,本文将是一篇不可错过的文章,我们将详细介绍php提供的三种在函数内使用全局变量的方式,并且为您提供关于angul

对于想了解在 PHP 中的函数内使用全局 $foo 与使用 $GLOBALS['foo']的读者,本文将是一篇不可错过的文章,我们将详细介绍php提供的三种在函数内使用全局变量的方式,并且为您提供关于angularjs – 如何让Angular路由器(或ui-router)接受像`#foo`这样的路由,而不是重定向到`#/ foo`?、bash 中分号和新行之间的区别“source rcfile; foo”与“source rcfilefoo”,其中“foo”是 rcfile 中定义的别名、Bash重定向:因为`&> foo`表示`> foo 2>&1`,是否有`&>>`?、c – T = char不能推导出std :: basic_string foo =“foo”?的有价值信息。

本文目录一览:

在 PHP 中的函数内使用全局 $foo 与使用 $GLOBALS['foo'](php提供的三种在函数内使用全局变量的方式)

在 PHP 中的函数内使用全局 $foo 与使用 $GLOBALS['foo'](php提供的三种在函数内使用全局变量的方式)

如何解决在 PHP 中的函数内使用全局 $foo 与使用 $GLOBALS[''foo'']

我一直在寻找有关在尝试在函数内部使用全局值时使用 global $foo; 还是仅使用 $GLOBALS[''foo''] 更好的信息,但我没有找到任何涵盖此问题的主题.

如果您想访问函数内的全局变量,您可以执行 global $i_want_to_use_this_one;,然后它就可用了。

但为什么不只做 $GLOBALS[''i_want_to_use_this_one'']

对我来说,第二个选项更好,因为它清楚地表明它是一个全局值。

如果您有一个相对较长的函数,您在开始时执行 global $foo;,稍后您可能会看到类似 hey($foo) 的内容,但不记得它是全局的。

通过执行hey($GLOBALS[''foo'']),您将永远不会怀疑正在发生的事情。

这不是意见问题(我知道这是题外话)。但由于我到处都看到 global $foo; 方法,特别是在 wordpress 核心中,您必须记住查看函数的开头,以了解从全局范围中获取的内容以及未获取的内容。

angularjs – 如何让Angular路由器(或ui-router)接受像`#foo`这样的路由,而不是重定向到`#/ foo`?

angularjs – 如何让Angular路由器(或ui-router)接受像`#foo`这样的路由,而不是重定向到`#/ foo`?

术语

> #foo:slashless scheme
>#/ foo:slashy计划

背景

应用程序的某些遗留部分使用(并依赖)无划线方案.我想以非破坏性的方式介绍Angular路由(可能使用ui-router),这样就不会干扰传统路由,以便部分应用程序可以随着时间的推移而优雅地逐步淘汰.一旦发生这种情况,全角应用程序可以立即切换到slashy方案.

至今

我尝试将$locationProvider.hashPrefix(”)设置为空字符串,但似乎您只能在#和/之间设置字符串,因此无效.

选项

看来我也可以

>重写应用程序的遗留部分,或
>重写Angular的$locationProvider.hashPrefix默认包含’/’.因此将其设置为”将变得有意义.

这两个选项看起来都非常耗时.

你知道一个更好的方法让Angular认识到这种无条件的方案吗?

解决方法

您可以尝试使用重定向!

使用ui-router:

app.config(function ($urlRouterProvider) {
  // when there is an 'old' route,redirect to new one
  $urlRouterProvider.when('foo','/foo');

  // You can also use regex for the match parameter
  $urlRouterProvider.when(/(\w+)/i,'/$1'); // UNTESTED!!!!!!
})

参考约ui-router wiki

对不起,但是标签很难在掠夺者/小提琴中测试,所以我现在不提供一个…

bash 中分号和新行之间的区别“source rcfile; foo”与“source rcfile<NEWLINE>foo”,其中“foo”是 rcfile 中定义的别名

bash 中分号和新行之间的区别“source rcfile; foo”与“source rcfilefoo”,其中“foo”是 rcfile 中定义的别名

如何解决bash 中分号和新行之间的区别“source rcfile; foo”与“source rcfile<NEWLINE>foo”,其中“foo”是 rcfile 中定义的别名

我认为在 bash 中给分号和给一个新行一样,只是组合多行。

但是,在 alias sudo=''sudo -i'' 文件中使用 .bashrc 时,以下结果似乎与我预期的不一样:

USER@HOST:~:$ cat tmp-1.sh
#!/bin/bash
source ~/.bashrc; sudo env | grep PATH

USER@HOST:~:$ cat tmp-2.sh
#!/bin/bash
source ~/.bashrc
sudo env | grep PATH

USER@HOST:~:$ ./tmp-1.sh
PATH=/usr/bin:/bin:/usr/sbin:/sbin

USER@HOST:~:$ ./tmp-2.sh
PATH=/home1/client/bin:/usr/python-3.8.2-r2/bin:/usr/jdk64/jdk1.8.0_112/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/bin:/root/bin

这两者有什么区别?

解决方法

如您的评论:

alias sudo=''sudo -i'' .bashrc 文件中

根据man bash

关于别名的定义和使用的规则有些令人困惑。 Bash 总是读在 在执行任何输入之前,至少有一行完整的输入,以及构成复合命令的所有行 该行上的命令或复合命令。 在读取命令时扩展别名, 不是在执行时。因此,与另一个命令出现在同一行的别名定义在读取下一行输入之前不会生效。 别名后面的命令 该行上的定义不受新别名的影响。执行函数时,此行为也是一个问题。别名在读取函数定义时展开,而不是在读取函数时展开 被执行,因为函数定义本身就是一个命令。因此,别名定义在 在执行该函数之前,该函数不可用。 为了安全起见,总是放别名 在单独的行中定义,并且不要在复合命令中使用别名。

对于几乎所有用途,别名都被 shell 函数取代。

Bash重定向:因为`&> foo`表示`> foo 2>&1`,是否有`&>>`?

Bash重定向:因为`&> foo`表示`> foo 2>&1`,是否有`&>>`?

以下将Stdout和Stderr重定向到logfile:

$command &> logfile

在下次运行命令期间,如何在不覆盖日志文件的情况下执行此重定向.像>>之类的东西如果它是一个简单的重定向.

解决方法

您可以将stderr(2)附加到stdout(1),然后在append-mode中重定向stdout:

command >> logfile 2>&1

2>& 1位将stderr附加到stdout,然后重定向stdout以通常的方式附加到logfile.

c – T = char不能推导出std :: basic_string foo =“foo”?

c – T = char不能推导出std :: basic_string foo =“foo”?

题:
在下面的代码中,模板参数类型扣除对于第一个样本似乎失败,但不适用于第二个样本.我不明白为什么第一个样本不能推导出T = char.我会认为,当从“foo”转换为std :: bacis_string< T>时,可以推导出T,但是即使没有这样做,我提供了第二个函数参数,我认为这将明确地限制T到char .为什么会失败?

Does not work:

#include <iostream>#include <string>template <typename T>void print(const std::basic_string<T>& a,const std::basic_string<T>& b){    std::cout << a << b << std::endl;}int main(){    std::string bar = "bar";    print("foo",bar);}

错误:

string.cpp:14:5: error: no matching function for call to 'print'    print("foo",bar);    ^~~~~string.cpp:6:6: note: candidate template ignored: Could not match      'basic_string<type-parameter-0-0,char_traits<type-parameter-0-0>,allocator<type-parameter-0-0> >' against 'char const[4]'void print(const std::basic_string<T>& a,const std::basic_string<T>& b)     ^1 error generated.

Works:

#include <iostream>#include <string>template <typename T>void print(const std::basic_string<T>& a,const std::basic_string<T>& b){    std::cout << a << b << std::endl;}int main(){    std::string foo = "foo";    std::string bar = "bar";    print(foo,bar);}

解决方法

问题是这里需要转换.为了推断T,编译器必须检查std :: basic_string的所有可能的实例,并查看哪些可以从一个const char *(或者实际上是const char(&)[4])构造.这当然是不可能的,因为它们中的无数很多.为什么它必须检查所有的,不能只是扫描主模板定义的构造函数使用const char *或const char(&)[4],对于一些T,std :: basic_string< T>可以部分或全部专门化,这些专业的成员与主要模板的成员没有任何关系.

关于在 PHP 中的函数内使用全局 $foo 与使用 $GLOBALS['foo']php提供的三种在函数内使用全局变量的方式的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于angularjs – 如何让Angular路由器(或ui-router)接受像`#foo`这样的路由,而不是重定向到`#/ foo`?、bash 中分号和新行之间的区别“source rcfile; foo”与“source rcfilefoo”,其中“foo”是 rcfile 中定义的别名、Bash重定向:因为`&> foo`表示`> foo 2>&1`,是否有`&>>`?、c – T = char不能推导出std :: basic_string foo =“foo”?等相关知识的信息别忘了在本站进行查找喔。

本文标签: