如何为类的每个属性设置getter和setter


How have getters and setters for every property of class?

难道我们不能为doctrine2实体类使用phpmagicgetter-setter,而不是为类的每个属性制作getter setter吗?

这是我为doctrine2编写的实体类,用于映射数据库中的表。

    <?php
namespace Entities;
use Doctrine'ORM'Mapping AS ORM;
/**
 * @ORM'Entity
 */
class blogs
{
    /**
     * @ORM'Id
     * @ORM'Column(type="integer", length=11)
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM'Column(type="string", length=1024, nullable=true)
     */
    private $url;
    /**
     * @ORM'Column(type="string", length=512, nullable=false)
     */
    private $title;
    /**
     * @ORM'Column(type="text", nullable=true)
     */
    private $blog_data;
    /**
     * @ORM'OneToMany(targetEntity="Entities'likes", mappedBy="blogs")
     */
    private $likeses;
    /**
     * @ORM'OneToMany(targetEntity="Entities'share", mappedBy="blogs")
     */
    private $shares;
    /**
     * @ORM'OneToMany(targetEntity="Entities'comments", mappedBy="blogs")
     */
    private $commentses;
    /**
     * @ORM'ManyToOne(targetEntity="Entities'ilook_user", inversedBy="blogses")
     * @ORM'JoinColumn(name="blog_writer_id", referencedColumnName="id", nullable=false)
     */
    private $ilook_user;
    /**
     * @ORM'ManyToOne(targetEntity="Entities'blog_categories", inversedBy="blogses")
     * @ORM'JoinColumn(name="blog_categories_id", referencedColumnName="id", nullable=false)
     */
    private $blog_categories;
    public function setId($id){
        $this->id = $id;
    }
    public function getId(){
        return $this->id;
    }
    public function setUrl($url){
        $this->url=$url;
    }
    public function getUrl(){
        return $this->url;
    }
    public function setTitle($title){
        $this->title = $title;
    }
    public function getTitle(){
        return $this->title;
    }
    public function setBlog_data($blog_data){
        $this->blog_data = $blog_data;
    }
    public function getBlog_data(){
        return $this->blog_data;
    }
    public function setLikeses($likeses){
        $this->likeses=$likeses;
    }
    public function getLikeses(){
        return $this->likeses;
    }
    public function setShares($shares){
        $this->shares = $shares;
    }
    public function getShares(){
        return $this->shares;
    }
    public function setCommentses($commentses){
        $this->commentses = $commentses;
    }
    public function getCommentses(){
        return $this->commentses;
    }
    public function setIlook_user($ilook_user){
        $this->ilook_user = $ilook_user;
    }
    public function getIlook_user(){
        return $this->ilook_user;
    }
    public function setBlog_categories($blog_categories){
        $this->blog_categories = $blog_categories;
    }
    public function getBlog_categories(){
        return $this->blog_categories;
    }
}

使用magics方法__set__get:查看此示例

<?php
class PropertyTest
{
    private $a, $b;
    public function __set($name, $value)
    {
        echo "Set '$name' to '$value''n";
        $this->$name = $value;
    }
    public function __get($name)
    {
        echo "Get $name 'n";
        return $this->$name;
    }
}
echo "<pre>'n";
$obj = new PropertyTest;
$obj->a = 1;
echo $obj->a . "'n'n";
echo "<pre>'n";
$obj = new PropertyTest;
$obj->b = "Hello";
echo $obj->b . "'n'n";
?> 

您可以在以下网址阅读更多信息:

http://php.net/manual/en/language.oop5.overloading.php#object.set

使用魔术方法__call:与其他示例一起编辑

<?php
class Called {
    private $Id, $Name;
    public function __call($name, $arguments) {
        $action = substr($name, 0, 3);
        $field = substr($name, 3);
        if($action == 'set') {
            $this->$field = $arguments[0];
        }       
        if($action == 'get') {
            return $this->$field;
        }       
    }
}
$obj = new Called();
$obj->setId(4);
echo "<br/>'n";
echo $obj->getId();
echo "<br/>'n";
$obj->setName('Peter');
echo "<br/>'n";
echo $obj->getName();
?>

您可以在以下网址阅读更多信息:

http://php.net/manual/en/language.oop5.overloading.php#object.call