【问题标题】:How to pass parameters to a class constructor - not an array如何将参数传递给类构造函数 - 而不是数组
【发布时间】:2012-08-25 16:13:44
【问题描述】:

我在 stackoverflow 上阅读了一些关于将参数传递给类库的其他帖子(例如,How to pass multiple parameters to a library in CodeIgniter?),我还阅读了库部分下的用户手册。

我想知道是否可以将参数作为单个变量而不是作为数组传递?

我的课程——我想在我的 codeigniter 解决方案之外使用——看起来像这样:

 <?php

     class ABC
     {


     private $_hostname;
     private $_password;
     private $_username;
     private $_connection;
     private $_data;
     private $_timeout;
     private $_prompt;


public function __construct($hostname, $password, $username = "", $timeout = 10) 

{
    set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib');
    include('Net/SSH2.php');

    $this->_hostname = $hostname;
    $this->_password = $password;
    $this->_username = $username;

} // __construct

    public function connect()
    {
    }

    public function dosomething()
    {
    }

我知道我可以这样做:

   $params = array('_hostname' => $ip, '_password' => 'password', '_username' => '');
$this->load->library($classname,$params );

但我不想使用数组,因为此类将被非 CI 解决方案重用。 我尝试恢复使用标准的 include() 语句。所以代码看起来像:

      set_include_path(get_include_path() . PATH_SEPARATOR . 'var/www/myCIapp/application/libraries');
      include_once('libraries/'.$classname.'.php');

但它抱怨说它找不到包含文件。具体消息是:

遇到了 PHP 错误

严重性:警告

消息:include_once() [function.include]:打开失败 'libraries/HP5406_ssh.php' 用于包含 (include_path='.:/usr/share/php:/usr/share/pear:var/www/myCIapp/application/libraries/')

文件名:models/ss_model.php

行号:88

任何建议将不胜感激。感谢阅读...

【问题讨论】:

  • 实例化类时将变量作为参数传递给构造函数。
  • 你能再具体一点吗?例如,我已经知道要执行以下操作: $params = array('_hostname' => $ip, '_password' => 'password', '_username' => ''); $this->load->library($classname,$params); //开关型号名称必须大写。
  • 我认为你会在 codeigniter 之外使用它,所以在这种情况下你可以使用$abc=new ABC($var1, $var2, $var3, $var4); 来实例化它,不确定我是否已经理解了。
  • @zerkms。是的,这是有技术原因的。那就是其他解决方案 - 非 codeigniter 解决方案 - 将使用这个库并且发送一个参数数组不是实例化具有某些值集的类的传统方式。希望这足够技术性。
  • @Sheikh Heera - 你是对的。我计划在非 CI 解决方案中重用这个库。在做了更多的阅读之后..我想这基本上就是我必须走的路。只需做一个包含/要求并从那里获取它。谢谢。

标签: php codeigniter


【解决方案1】:

使用 CI APPPATH CONSTANT 的一个简单方法是圆顶:

include_once(APPPATH.'libraries/'.$classname.'.php';

这个常数是由 CodeIgniter 在 index.php 中设置的,所以你知道它总是指向你的应用程序目录。

【讨论】:

  • 谢谢!我更喜欢这样!
【解决方案2】:

包含不起作用的解决方案是将包含语句更改为:

 include_once dirname(__FILE__) . '/../libraries/'.$classname.'.php';

我假设它会自动从当前文件的位置开始。但事实并非如此。 上面的行将强制它从当前文件的位置开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多