Chris
Chris

Reputation: 4810

PHP accessing protected properties of an object from a static method

Not sure if this is even a question. My understanding of protected/private properties and methods is that they can only be accessed from within the class. I have a static method which is sort of a quick method for saving an object to a database. I creating the object from within the static method and setting properties through setter functions. One property however has no setter and yet, I am still able to access it. I have a class that looks something like this:

class Person {

   protected $name;
   protected $email;
   protected $created;

   //set name
   public function set_name( $name ) {
       $this->name = $name;
   }

   //set email
   public function set_email( $email ) {
       $this->email = $email;
   }

   //add new person
   static function add( $data ) {

       $person = new Person;
       $person->set_name( $data['name'] );
       $person->set_email( $data['email'] );

       //set created date
       $person->created = date('Y-m-d h:ia', time());

       //save to db
       $db->add($data);

       return $person;

   }

}

Implementation looks something like this:

$person = Person::add(array(
   'name' => 'Bob Barker',
   'email' => '[email protected]'
));

This code works. By works I mean that the created date get set successfully. Why?

Upvotes: 2

Views: 2910

Answers (2)

christopher_b
christopher_b

Reputation: 958

Protected properties can be modified by code within the class, not just from instances of that class.

Upvotes: 1

aynber
aynber

Reputation: 23011

Because you're setting it within the class. The setters are often used for setting the variables from outside from the class, such as Person::set_name('Bob Barker'). But if you tried Person->created = date(), it should fail.

Upvotes: 0

Related Questions