将类和方法的属性插入类的一些好做法是什么


What are some good practices to insert properties for class and methods to a class?

好的,问题是我正在使用一个类,它依赖于外部配置来工作和验证内容但是,由于这些属性的数量如此之多,我想知道如何导入它们。

所以,想象一下这是这样的类:

   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;

}
现在,问题是,将这些

属性导出到此类中是非常有效、最好的方法,因为我什至不确定,设置是否应该写在函数或其他类中......

构造函数注入的替代方法是 setter 或属性注入。

它不像构造函数注入那样"干净",因为没有什么可以保证调用方确实会注入依赖项。

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);

现在,还可以从容器获取帮助,以自动在属性或资源库中注入依赖项。

我通常在控制器中获得很多依赖项,所以这就是我将使用属性/setter 注入的地方。您可以在本文中看到我如何使用我的容器来实现此目的。

使用魔法方法__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 );

这是否适用于您的应用程序?

相关文章: