已经发布了几个关于依赖注入的具体问题的问题,例如何时使用它以及它有哪些框架.然而,
什么是依赖注入以及何时/为什么应该或不应该使用它?
language-agnostic design-patterns dependency-injection terminology
如何通过"order"键的值对此数组进行排序?尽管这些值目前是连续的,但它们并不总是如此.
Array
(
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
)
Run Code Online (Sandbox Code Playgroud) global关键字的效用是什么?
是否有任何理由更喜欢一种方法?
方法1:
function exempleConcat($str1, $str2)
{
return $str1.$str2;
}
Run Code Online (Sandbox Code Playgroud)
方法2:
function exempleConcat()
{
global $str1, $str2;
return $str1.$str2;
}
Run Code Online (Sandbox Code Playgroud)
什么时候使用有意义global?
对我来说,它似乎很危险 ......但它可能只是缺乏知识.我感兴趣的是记录(例如代码示例,文档链接......)技术原因.
提前致谢!
这是关于这个主题的一个很好的一般性问题,我(@Gordon)正在提供奖励以获得更多答案.无论您的答案是否与我的答案一致或给出不同的观点都无关紧要.由于该global主题时不时出现,我们可以使用一个很好的"规范"答案来链接.
function parts($part) {
$structure = 'http://' . $site_url . 'content/';
echo($tructure . $part . '.php');
}
Run Code Online (Sandbox Code Playgroud)
此函数使用$site_url在此页面顶部定义的变量,但此变量未传递到函数中.
我们如何让它在函数中返回?
我有一个config.php包含在每个页面.在配置中我创建一个类似于下列的数组:
$config = array();
$config['site_name'] = 'Site Name';
$config['base_path'] = '/home/docs/public_html/';
$config['libraries_path'] = $config['base_path'] . '/libraries';
//etc...
Run Code Online (Sandbox Code Playgroud)
然后我有function.php,几乎每个页面都包括,我必须使用它global $config来访问它 - 这就是我想要摆脱的!
如何$config在不使用代码的情况下访问代码的其他部分global?
任何人都可以解释一下,为什么我不应该global在我的例子中使用?有人说这是一个糟糕的语气,其他人说它不安全?
我在何处以及如何使用它的示例:
function conversion($Exec, $Param = array(), $Log = '') {
global $config;
$cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec;
foreach ($Param as $s)
{
$cmd .= ' ' . $s;
}
}
Run Code Online (Sandbox Code Playgroud)
按照Vilx的建议,将所有这些放在类中会很酷但在这种情况下,我如何将它与从提取配置 …
我正在尝试使用PDO预处理语句为MySQL数据库上的查询创建正确的错误处理.我希望程序在检测到预准备语句进程中的错误时退出.利用PDO准备好的声明过程中的每一步都False失败的事实,我把这个令人反感的黑客扔到了一起:
global $allFields;
global $db;
global $app;
//dynamically append all relevant fields to query using $allFields global
$selectQuery = 'SELECT ' . implode($allFields, ', ') .
' FROM People WHERE ' . $fieldName . ' = :value';
//prepared statement -- returns boolean false if failure running query; run success check
$success = $selectQueryResult = $db->prepare($selectQuery);
checkSuccess($success);
$success = $selectQueryResult->bindParam(':value', $fieldValue, PDO::PARAM_STR);
checkSuccess($success);
$success = $selectQueryResult->execute();
checkSuccess($success);
Run Code Online (Sandbox Code Playgroud)
与checkSuccess()执行以下操作:
function checkSuccess($success) {
if ($success == false) {
//TODO: …Run Code Online (Sandbox Code Playgroud) 能够在PHP中的函数范围内定义局部常量可能会很好
这样,任何阅读该函数的人都会知道该定义在函数中是最终的,并且不会影响任何外部代码
像这样的东西(无效的语法):
public function laughManiacally($count){
const LAUGH = 'HA';
for($i=0;$i<$count;$i++){
echo LAUGH;
}
};
Run Code Online (Sandbox Code Playgroud)
或者可能(再次无效):
...
final $laugh = 'HA';
...
Run Code Online (Sandbox Code Playgroud)
反正有没有这样做?如果没有,为什么不呢?
UPDATE
JavaScript允许块级常量声明的方式类似于我正在搜索的功能
function laughManiacally(count) {
const LAUGH = 'Ha';
for (let i = 0; i < count; i++) {
console.log(LAUGH);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个自定义主题,其中包含许多我希望在整个过程中使用的变量.
例:
$tv = $options['tv'];
$movies = $options['movies'];
$print = $options['print'];
//....and about 50 more.
Run Code Online (Sandbox Code Playgroud)
为此,我只是将它们全部放在一个名为vars.php的文件中,然后在主题的header.php中包含它...
require_once('vars.php');
Run Code Online (Sandbox Code Playgroud)
虽然这确实有效,但它并不是最好的方式.我在很多场合读过使用全局变量(大概是在function.php中)并不是一个好主意,但这是真的吗?
但是如果在functions.php中使用全局变量(甚至很多都是)这是正确的,那么这是正确的方法吗?:
global $tv;
$tv = $options['tv'];
global $movies
$movies = $options['movies'];
global $print
$print = $options['print'];
Run Code Online (Sandbox Code Playgroud) 将指令设置display_errors为true(error_reporting设置为E_ALL)时会打印当前请求期间发生的所有错误.
由于我在我的PHP代码中发送标题,我得到了更多错误(在发送内容后发送标题是不可能的).
现在我想将错误消息添加到我的页面末尾.在那里,我想展示所有发生的错误(直到那时).不幸的是,error_get_last只返回发生的最后一个错误.
我首先想到set_error_handler可能会解决问题,但我担心我的错误记录不再起作用了:
重要的是要记住,对于error_types指定的错误类型,标准PHP错误处理程序是完全被绕过的,除非回调函数返回FALSE.
除此之外:
下面的错误类型不能与用户定义的函数来处理:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,最E_STRICT的其中的set_error_han dler()被调用的文件中提出.
但也许他们也没有 error_get_last()
那么有没有办法在输出生成的内容后打印所有错误?