Brown
Brown

Reputation: 173

PHP how set default value to a variable in the class?

class A{
    public $name;

    public function __construct() {
      $this->name = 'first';
    }

    public function test1(){
        if(!empty($_POST["name"]))
        {
            $name = 'second';
        }
        echo $name;
    }

$f = new A;
$f->test1();

Why don't we get first and how set right default value variable $name only for class A?

I would be grateful for any help.

Upvotes: 9

Views: 23868

Answers (3)

Oscar Gallardo
Oscar Gallardo

Reputation: 2718

you have two options to set the default values for the class attributes:

Option 1: set at the parameter level.

class A 
{
    public $name = "first";

    public function test1()
    {
        echo $this->name;
    }
}

$f = new A();
$f->test1();

Option 2: the magic method __construct() always being executed each time that you create a new instance.

class A 
{
    public $name;

    public function __construct() 
    {
        $this->name = 'first';
    }

    public function test1()
    {
        echo $this->name;
    }
}

$f = new A();
$f->test1();

Upvotes: 6

Jagadish Singh R
Jagadish Singh R

Reputation: 1

Use isset() to assign a default to a variable that may already have a value:

if (! isset($cars)) {
    $cars = $default_cars;
}

Use the ternary (a ? b : c) operator to give a new variable a (possibly default) value:

$cars = isset($_GET['cars']) ? $_GET['cars'] : $default_cars;

Upvotes: -4

Fluffeh
Fluffeh

Reputation: 33512

You can use a constructor to set the initial values (or pretty much do anything for that matter) as you need to like this:

class example
{

    public $name;

    public function __construct()
    {
        $this->name="first";
    }

}

Then you can use these default values in your other functions.

class example
{

    public $name;

    public function __construct()
    {
        $this->name="first";
    }

    public function test1($inputName)
    {
        if(!empty($inputName))
        {
            $this->name=$inputName;
        }
        echo "The name is ".$this->name."\r\n";
    }

}

$ex=new example();
$ex->test1(" "); // prints first.
$ex->test1("Bobby"); // prints Bobby
$ex->test1($_POST["name"]); // works as you expected it to.

Upvotes: 17

Related Questions