在PHP中设置属性的值

时间:2017-05-23 09:10:54

标签: php oop properties

我有一个名为members的类,下面有一个例子。我要问的是我如何设置标题的值。因此,例如,我只允许先生,夫人,小姐和任何其他值throw out an error陈述Only Mr,Mrs,Miss is allowed,名字必须是约翰。

class Member 
{

    private $title;
    private $firstname;

    public function __construct( $title ) 
    {
        $this->title = $title;

    }

    public function showProfile() 
    {
        echo "<dl>";
        echo "<dt>Title:</dt><dd>$this->title</dd>";
        echo "</dl>";
    }
}

$data = new Member( "Mrr" );
$data->showProfile();

3 个答案:

答案 0 :(得分:2)

你可以尝试这个,希望这会有所帮助。

Try this code snippet here

<?php

ini_set("display_errors", 1);

class Member
{

    private $title;

    public function __construct($title)
    {
        if(!in_array($title, ["Mr","Mrs","Miss"]))
        {
            throw new Exception("Only Mr,Mrs,Miss are allowed!");
            //or you can simple echo out your message instead of exception
        }
        $this->title = $title;
    }

    public function showProfile()
    {
        echo "<dl>";
        echo "<dt>Title:</dt><dd>$this->title</dd>";
        echo "</dl>";
    }

}

$data = new Member("Mrr");

您可以选择使用error为此in the class设置变量,以防止进一步执行类脚本的方法。你也可以这样做

解决方案2:

Try this code snippet here

<?php

ini_set("display_errors", 1);

class Member
{

    private $title;
    private $error=false;
    public function __construct($title)
    {
        if(!in_array($title, ["Mr","Mrs","Miss"]))
        {
            $this->error=true;
        }
        $this->title = $title;
    }

    public function showProfile()
    {
        if($this->error!==true)
        {
            echo "<dl>";
            echo "<dt>Title:</dt><dd>$this->title</dd>";
            echo "</dl>";
        }
        else
        {
            echo "Only Mr,Mrs,Miss is allowed!";
        }
    }

}

$data = new Member("Mrr");
$data->showProfile();

答案 1 :(得分:1)

制作一个制定者

   function setTitle($newTitle){
      if(in_array($newTitle, array('Mr', 'Miss', 'Mrs' ))
        $this->title=$newTitle;
      else
        echo 'ERROR';
    }

然后从构造函数

中调用它

答案 2 :(得分:0)

我不喜欢任何答案。 这是我的。我认为你应该在解决方案中使用mutator。成员类应该与setter分离。

class Member
{

private $title;

public function setTitle($title)
{
    $this->title = $title;
}
public function showProfile()
{
    return sprintf("<dl><dt>Title</dt><dt><dd>%s</dd></dt></dl>" , $this->title );
}

}



class TitleProperty
{
protected $name = 'title';
protected $allowed_allowed = ['mr', 'mrs', 'miss'];

public $errors = [];

/**
*@param Member $member
*@param string $value
*/
public function __construct( Member $member, $value )
{
    if(!in_array($value, $this->allowed_allowed )){
        $this->errors[] = "Only Mr,Mrs,Miss is allowed";
    }
    else{
        $member->setTitle( $value );
    }
}
}

$member = new Member();
$property = new TitleProperty($member, 'hello');
if($property->errors){
print_r($property->errors);
}
else{
echo 'title set.';
}

你去了