标签: parameter-passing

如何在简单的PHP函数中使用"依赖注入",我应该打扰吗?

我听到人们一直在谈论依赖注入和它的好处,但我真的不明白它.

我想知道它是否是"我一直将数据库连接作为参数传递"问题的解决方案.

我试过阅读维基百科上的条目,但这个例子是用Java编写的,所以我不能完全理解它试图弄清楚它的区别.(http://en.wikipedia.org/wiki/Dependency_injection).

我读了这篇依赖注入的php文章(http://www.potstuck.com/2009/01/08/php-dependency-injection/),似乎目标是不将依赖项传递给对象直接,但封锁对象的创建以及它的依赖关系的创建.不过,我不知道如何在使用php函数上下文中应用它.

另外,是以下的依赖注入,我是否应该尝试在功能上下文中进行依赖注入?

版本1 :(我创建的代码类型,但每天都不喜欢)

function get_data_from_database($database_connection){
    $data = $database_connection->query('blah');
    return $data;
}
Run Code Online (Sandbox Code Playgroud)

版本2 :(不必传递数据库连接,但可能不是依赖注入?)

function get_database_connection(){
    static $db_connection;
    if($db_connection){
        return $db_connection;
    } else {
        // create db_connection
      ...
    }
}

function get_data_from_database(){
   $conn = get_database_connection();
   $data = $conn->query('blah');
   return $data;
}

$data = get_data_from_database();
Run Code Online (Sandbox Code Playgroud)

版本3 :("对象"/数据的创建是独立的,数据库代码仍然是,所以这可能算作依赖注入?)

function factory_of_data_set(){
    static $db_connection;
    $data_set = null;
    $db_connection = get_database_connection();
    $data_set = $db_connection->query('blah');
    return $data_set;
}

$data = factory_of_data_set();
Run Code Online (Sandbox Code Playgroud)

任何人都有良好的资源或只是洞察力,使方法和利益 - 水晶 - 清楚?

php dependency-injection parameter-passing

67
推荐指数
3
解决办法
3万
查看次数

你可以在R中传递参考吗?

你能用"R"通过参考吗?例如,在以下代码中:

setClass("MyClass",
    representation(
    name="character"
    ))


instance1 <-new("MyClass",name="Hello1")
instance2 <-new("MyClass",name="Hello2")

array = c(instance1,instance2)

instance1
array

instance1@name="World!"

instance1
array
Run Code Online (Sandbox Code Playgroud)

输出是

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "Hello1"


[[2]]
An object of class “MyClass”
Slot "name":
[1] "Hello2"
Run Code Online (Sandbox Code Playgroud)

但我希望如此

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "World!"


[[2]]
An object of class …
Run Code Online (Sandbox Code Playgroud)

oop r parameter-passing pass-by-reference

66
推荐指数
5
解决办法
5万
查看次数

MSBuild将参数传递给CallTarget

我正在尝试在我的MSBuild文件中创建一个可重用的目标,所以我可以使用不同的参数多次调用它.

我有这样的骨架:

<Target Name="Deploy">
    <!-- Deploy to a different location depending on parameters -->
</Target>

<Target Name="DoDeployments">
    <CallTarget Targets="Deploy">
        <!-- Somehow indicate I want to deploy to dev -->
    </CallTarget>

    <CallTarget Targets="Deploy">
        <!-- Somehow indicate I want to deploy to testing -->
    </CallTarget>
</Target>
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何允许参数传递到CallTarget,然后依次传递给Target自己.

msbuild parameter-passing msbuild-target

63
推荐指数
2
解决办法
4万
查看次数

AngularJS指令传递字符串

该指令试图创建一个名为进度条的HTML元素,用于在页面移动到页面时跟踪进度.我正在尝试将其开发用作: <progress-bar progress='1' max='6' error="true"></progress-bar>

我只是试图将html中的^^元素中的信息传递给我的指令并处理信息以适当地更改进度条.

这适用于"progress"和"max",它取整数值,但由于某种原因,注释掉的代码会处理"错误"(这是一个字符串)会导致问题.我是angularJS的新手,所以如果这些听起来令人困惑或不清楚,我很抱歉......请问我是否需要详细说明/澄清.提前致谢!

app.directive('progressBar', function(){

var compileProgressBar = function(scope, elem, attrs) {
    var append = '<nav class="navbar navbar-fixed-bottom navbar-footer" role="navigation">\
                    <div class="container">\
                        <div class="row">';
    var i = 1;
    while (i <= parseInt(scope.max)) {
        if (i <= parseInt(scope.progress)) {
            //if (scope.error == "true"){
                //...
            //}
            //else {
            append += '<div class="col-xs-1"><div class="circle-filled"><center>'+i+'</center></div></div>'
            //}
        } else {
            append += '<div class="col-xs-1"><div class="circle-hallow"><center>'+i+'</center></div></div>'
        }
        i++;
    }
    append += '</div></div></nav>'
    elem.append(append);
    elem.bind('click', function(){
        if (scope.progress > 1) {
            history.back();
            scope.$apply(); …
Run Code Online (Sandbox Code Playgroud)

javascript string parameter-passing angularjs angularjs-directive

62
推荐指数
1
解决办法
6万
查看次数

使用脚本中的参数调用第二个脚本

我对PowerShell比较陌生,并且有一个脚本可以读取一个配置文件,该文件会产生一组名称值对,我希望将它们作为参数传递给第二个PowerShell脚本中的函数.

我不知道在设计时将在此配置文件中放置哪些参数,所以就在我需要调用第二个PowerShell脚本时,我基本上只有一个变量具有第二个脚本的路径,第二个脚本变量,它是要传递给路径变量中标识的脚本的参数数组.

因此,包含第二个脚本($ scriptPath)路径的变量可能具有如下值:

"c:\the\path\to\the\second\script.ps1"
Run Code Online (Sandbox Code Playgroud)

包含参数($ argumentList)的变量可能类似于:

-ConfigFilename "doohickey.txt" -RootDirectory "c:\some\kind\of\path" -Max 11
Run Code Online (Sandbox Code Playgroud)

如何从这种状态到使用$ argumentList中的所有参数执行script.ps1?

我希望来自第二个脚本的任何write-host命令对于调用此第一个脚本的控制台是可见的.

我尝试过dot-sourcing,Invoke-Command,Invoke-Expression和Start-Job,但我还没有找到一种不会产生错误的方法.

例如,我认为最简单的第一条路线是尝试按如下方式调用Start-Job:

Start-Job -FilePath $scriptPath -ArgumentList $argumentList
Run Code Online (Sandbox Code Playgroud)

...但是由于此错误而失败:

System.Management.Automation.ValidationMetadataException:
Attribute cannot be added because it would cause the variable
ConfigFilename with value -ConfigFilename to become invalid.
Run Code Online (Sandbox Code Playgroud)

...在这种情况下,"ConfigFilename"是第二个脚本定义的参数列表中的第一个参数,我的调用显然试图将其值设置为"-ConfigFilename",这显然是为了按名称标识参数,没有设定它的价值.

我错过了什么?

编辑:

好的,这是一个名为invokee.ps1的文件中的待调用脚本的模型

Param(
[parameter(Mandatory=$true)]
[alias("rc")]
[string]
[ValidateScript( {Test-Path $_ -PathType Leaf} )]
$ConfigurationFilename,
[alias("e")]
[switch]
$Evaluate,
[array]
[Parameter(ValueFromRemainingArguments=$true)]
$remaining)

function sayHelloWorld()
{
    Write-Host "Hello, everybody, the config file is <$ConfigurationFilename>."
    if ($ExitOnErrors)
    {
        Write-Host "I should …
Run Code Online (Sandbox Code Playgroud)

powershell parameter-passing command-line-arguments invoke-command start-job

57
推荐指数
5
解决办法
16万
查看次数

将数组传递给MySQL存储例程

我需要将一个字符串数组作为参数传递给MySQL存储的例程.该数组可能很长,其元素数量不固定.然后,我想将字符串值放入具有一列的内存表中,因此我可以处理数据.我不知道这是否可以在MySQL中完成.可能需要肮脏的解决方法.

例如,我有字符串值:

Banana, Apple, Orange
Run Code Online (Sandbox Code Playgroud)

现在我想从MySQL Fruits表中获取这些水果的数据.伪代码:

create function GetFruits(Array fruitArray) 
   declare @temp table as
      fruitName varchar(100)
   end

   @temp = convert fruitArray to table
   select * from Fruits where Name in (select fruitName from @temp)
end
Run Code Online (Sandbox Code Playgroud)

Microsoft SQL Server允许您使用TEXT数据类型并将数组作为XML字符串提交,从而快速创建内存表.但是,我不认为这种技术在MySQL中是可行的.

任何有关如何做到这一点的帮助将不胜感激!

mysql arrays stored-procedures parameter-passing

53
推荐指数
5
解决办法
11万
查看次数

C++视图类型:通过const&或值传递?

这最近出现在代码审查讨论中,但没有令人满意的结论.有问题的类型是C++ string_view TS的类似物.它们是指针和长度周围的简单非拥有包装器,装饰有一些自定义函数:

#include <cstddef>

class foo_view {
public:
    foo_view(const char* data, std::size_t len)
        : _data(data)
        , _len(len) {
    }

    // member functions related to viewing the 'foo' pointed to by '_data'.

private:
    const char* _data;
    std::size_t _len;
};
Run Code Online (Sandbox Code Playgroud)

出现的问题是,是否有一种方法可以通过值或const引用来传递这些视图类型(包括即将发生的string_view和array_view类型).

支持传递值的参数等于"减少输入","如果视图具有有意义的突变,则可以改变本地副本",并且"可能效率不低".

支持pass-by-const-reference的参数相当于"通过const&'传递对象更加惯用,而'可能效率不低'.

是否有任何额外的考虑因素可以通过一种或另一种方式最终通过值或const引用传递惯用视图类型.

对于这个问题,可以安全地假设C++ 11或C++ 14语义,以及足够现代的工具链和目标体系结构等.

c++ parameter-passing pass-by-reference pass-by-value c++11

51
推荐指数
5
解决办法
6021
查看次数

如何在C中的函数中传递2D数组(矩阵)?

我需要这样做才能在矩阵上持续操作.这是否意味着它需要通过引用传递?

这还够吗?

void operate_on_matrix(char matrix[][20]);

c parameter-passing multidimensional-array

50
推荐指数
3
解决办法
18万
查看次数

检测传递的参数是否为数组?使用Javascript

可能重复:
如何检测变量是否为数组

我有一个简单的问题:

如何检测传递给我的javascript函数的参数是否为数组?我不相信我可以测试:

if (typeof paramThatCouldBeArray == 'array') 
Run Code Online (Sandbox Code Playgroud)

那有可能吗?

我该怎么办?

提前致谢.

javascript arrays arguments parameter-passing

48
推荐指数
3
解决办法
3万
查看次数

jQuery将$(this)传递给函数

我有这样的代码行:

$(this).parent().parent().children().each(function(){
    // do something
});
Run Code Online (Sandbox Code Playgroud)

它运作良好.但我需要多次运行这些行.所以我创建了一个函数并将$(this)参数传递给函数:

myFunc( $(this) );

function myFunc(thisObj) {
    thisObj.parent().parent().children().each(function(){
        // do something
    });
}
Run Code Online (Sandbox Code Playgroud)

但就这样,它没有用.

jquery this parameter-passing

47
推荐指数
2
解决办法
7万
查看次数