好的,问题是我正在使用一个类,它依赖于外部配置来工作和验证 但是,由于这些属性数量如此之多,我想知道如何导入它们。
所以,想象一下这是班级:
class doSomething{
public function __construct($conn){
$this->conn = $conn;
}
public function validateURL($url){
//do something with $url
}
public function validateName($name){
//do something with $name
}
public function validateAge($age){
// process age
}
public function lookEmailInDatabase($email, $table){
// process data
}
}
现在,让我们假设上面是名为doSomthingClass.php
所以,让我们假设,我有另一个类来声明这些属性的值
function declareProperties($val){
$conn = new PDO(...);
$url = 'http://foo.com';
$name = 'john';
$age = '17';
$email = 'simon@yahoo.com';
$table = 'foobartar';
return $val;
}
现在,问题是,什么是非常有效的,将这些属性导出到这个类的最佳方法,因为我甚至不确定,是否应该在函数内部写入设置,或者另一个班..
答案 0 :(得分:1)
构造函数注入的替代方法是setter或property injection。
它不像构造函数注入那样“干净”,因为没有什么能保证调用者确实会注入依赖项。
class Example {
private $property1;
// Property injection (note that the property is public)
public $property2;
private $property3;
public function __construct($param) {
// Constructor injection
$this->property1 = $param;
}
public function setProperty3($param) {
// Setter injection
$this->property3 = $param;
}
}
用法:
// Constructor injection
$o = new Example($dependency1);
// Property injection
$o->property2 = $dependency2;
// Sett injection
$o->setProperty3($dependency3);
现在,您还可以从Container获取帮助,以自动在属性或设置器中注入依赖项。
我通常在控制器中获得很多依赖项,因此我将使用property / setter注入。您可以看到in this article我如何使用我的容器。
答案 1 :(得分:0)
如何使用魔术方法__get()
和__set()
:
public $vars = array();
public function __get( $key )
{
if( isset( $this->vars[$key] ) )
{
return $this->vars[$key];
{
else
{
return false;
}
}
public function __set( $key, $value )
{
$this->vars[$key] = $value;
}
举个例子:让我们说$ row是数据。如果您使用列名作为属性名称(如果您计划好结构,这也是很好的做法),您可以使用这样的方法:
public function load( $row )
{
if( is_array( $row ) )
{
foreach( $row as $key => $value )
{
$this->$key = $value;
}
return true;
}
return false;
}
修改强>
您甚至不必传递这样的变量,您可以在外部使用公共方法:
$foo = new foo( $db );
$foo->bar( $three, $external, $params );
这适用于您的应用程序吗?