number = $number; } } // We cannot set the number using "$phone->number = '123-456-7890'". // Instead, we can use the public method. $phone = new Phone(); $phone->setNumber('123-456-7890'); // Making an attribute or function private, gives you more control over the data in the object. // For example, we could prevent a number being set if it starts with a 7. class Phone2 { private $number; public function setNumber($number) { if (substr($number, 0, 1) !== '7') { $this->number = $number; } } } // The "protected" and "private" keywords work a little differently. // They both prevent functions and properties from being accessed outside an object. // However, a method or property marked "protected" can still be accessed by a child object. class Phone3 { private $number; protected $caller; public function setNumber($number) { $this->number = $number; } } // In class "Smartphone", the "caller" property is accessible because the parent class // has it marked as "protected". However, "Smartphone" cannot access the the "number" property // because it is still listed as private. class Smartphone extends Phone3 { public function setCaller($caller) { $this->caller = $caller; } }