1

我有一类人

class Person
{
    public $Name;
    public $Age;
}

如果我想创建一个新的 Person 并填写他的属性,我通常会实现一个构造并使用它来填充实例。

class Person
{
    public $Name;
    public $Age;

    function __Construct( $params )
    {
        $this->Name = ( isset( $params[ "Name" ] ) ) ? $params[ "Name" ] : null;
        $this->Age = ( isset( $params[ "Age" ] ) ) ? $params[ "Age" ] : null;
    }
}

$person = new Person( array(
    "Name" => "Michael",
    "Age" => "25"
) );

有没有更好的方法来做到这一点?

例如,C# 中的 getter 和 setter?

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

new Person { 
    Name = "Michael", 
    Age = 25 
}

知道的想法是扩展我的知识。我知道魔术方法,但我真的很想看到一个我所代表的例子,因为我很困惑。

编辑://

下面是另一个例子,它阐明了为什么 getter 和 setter 被大量邀请到 PHP 中。

<?php
abstract class DataIdentity
{
    public $Id; 
}

abstract class Animal extends DataIdentity
{
    public $Type;
    public $Size;
}

class Dog extends Animal
{
    private $BarkVolume;

    public function __Construct( $params )
    {
        $this->Type = "Dog";
        $this->Size = ( isset( $params[ "Size" ] ) ) ? $params[ "Size" ] : null;
        $this->Energy = ( isset( $params[ "Energy" ] ) ) ? $params[ "Energy" ] : null;
    }

    public function GetBarkVolume()
    {
        return $this->Energy * $this->Size;
    }
}

$animals = array(
    new Dog( array(
        "Size" => 34,
        "Energy" => 12
    ) )
);
?>

没有它们,我必须在 dog 构造函数中引用跨 3 个实体的所有属性,然后在另一种类型的类中执行相同操作...我知道其他解决方法,但重点仍然存在,这对我来说是一个很大的学习. 谢谢等。

4

0 回答 0