我是OOP的新手,我在理解它背后的结构方面遇到了一些麻烦。 我在Codeigniter(模板)中创建了一个库,我在加载时传递了一些参数,但我想将这些参数传递给库的函数。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Template {
public function __construct($params)
{
echo '<pre>'; print_r($params); echo '</pre>';
//these are the parameters I need. I've printed them and everything seems fine
}
public function some_function()
{
//I need the above parameters here
}
}
答案 0 :(得分:5)
试试这个:
class Template {
// Set some defaults here if you want
public $config = array(
'item1' => 'default_value_1',
'item2' => 'default_value_2',
);
// Or don't
// public $config = array();
// Set a NULL default value in case we want to use defaults
public function __construct($params = NULL)
{
// Loop through params and override defaults
if ($params)
{
foreach ($params as $key => $value)
{
$this->config[$key] = $value;
}
}
}
public function some_function()
{
//i need the above parameters here
// Here you go
echo $this->config['item1'];
}
}
这会将array('item1' => 'value1', 'item2' => 'value2');
转换为您可以使用的内容,例如$this->config['item1']
。您只是将数组分配给类变量$config
。如果愿意,您也可以遍历变量并验证或更改它们。
如果您不想覆盖您设置的默认值,请不要在$params
数组中设置该项。根据需要使用尽可能多的不同变量和值,这取决于你:)
正如Austin has wisely advised一样,请务必阅读php.net并亲自体验。文档可能会令人困惑,因为它们提供了大量边缘案例,但如果您查看Codeigniter中的库,则可以看到一些示例或如何使用类属性。这是你必须必须熟悉的面包和黄油的东西才能到达任何地方。
答案 1 :(得分:2)
让班级成员这样:
class Template {
var $param1
var $param2
public function __construct($params)
{
$this->param1 = $params[1]
$this->param2 = $params[2]
//and so on
}
}
然后你可以在你的功能中使用它们
答案 2 :(得分:1)
您可能希望将参数存储为类中的属性,以便所有方法都可以访问它们。
请参阅有关PHP 5中的属性的文档:http://www.php.net/manual/en/language.oop5.properties.php
编辑:实际上,如果你对OOP完全不熟悉,你会发现起初可能很难绕开。当您遇到问题时,一次向SO提出问题将是一种非常低效的方法。如果您想节省一些时间,我建议您首先阅读一个基本文本,该文本解释OOP的概念,而不是特定于语言的实现细节(例如The Object-Oriented Thought Process)。然后,当您需要详细信息时,the PHP docs on the subject非常好(并且免费)。
答案 3 :(得分:0)
我建议决定天气,班级的变量是私人的还是公共的。这有助于提高可读性。私有变量应该用于内部变量,其中公共变量应该用作对象属性的东西。