Home arrow PHP arrow Page 4 - Working with Private Properties to Protect PHP 5 Class Data

Defining private class properties - PHP

Welcome to the second installment of the series, “Protecting the data of PHP 5 classes with member visibility.” It is made up of six comprehensive tutorials and provides you with a guide to help you get started using member visibility with PHP 5. It also complements the corresponding theoretical concepts with illustrative hands-on examples.

TABLE OF CONTENTS:
  1. Working with Private Properties to Protect PHP 5 Class Data
  2. A review of public and protected class properties in PHP 5
  3. Extending the use of protected class properties: working with a subclass
  4. Defining private class properties
By: Alejandro Gervasio
Rating: starstarstarstarstar / 5
May 28, 2008

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

If you found working with public and protected properties of a given PHP 5 class easy, then it’s quite probable that you'll feel the same way when it comes to using private data members. By definition, any class property declared private can only be accessed from inside the originating class. That’s all.

However, even though the above definition is very intuitive, it’s necessary to complement it adequately with a practical example. With that idea in mind, in the next few lines, I’m going to list the signature of the same “DataSaver” class that you saw earlier, but this time, its respective properties will be declared private.

The brand new definition of this sample class looks like this:


// define 'DataSaver' class (properties are defined private)


class DataSaver{

private $filePath;

private $data;

public function __construct($data,$filePath){

if(!$data||strlen($data)>1024){

throw new Exception('Invalid data for being saved to target file.');

}

if(!file_exists($filePath)){

throw new Exception('Invalid target file.');

}

$this->data=$data;

$this->filePath=$filePath;

}

// save data to target file

public function save(){

if(!$fp=fopen($this->filePath,'w')){

throw new Exception('Error opening target file.');

}

if(!fwrite($fp,$this->data)){

throw new Exception('Error writing data to target file.');

}

fclose($fp);

}

// get target file via an accessor

public function getFilePath(){

return $this->filePath;

}

// get data via an accessor

public function getData(){

return $this->data;

}

}


As you can see, the signature of the above “DataSaver” class remains practically the same, with the exception of the level of visibility assigned to its respective $data and $filePath properties, since they’ve been declared private.

Obviously, this implies that the properties in question can only be accessed from inside the originating class, and any attempt to retrieve them from a different scope will result in a fatal error being triggered by the PHP interpreter.

This condition is clearly reflected by the following hands-on example:


try{

// create new instance of 'DataSaver' class

$dataSaver=new DataSaver('This string of data will be saved to a target file!','datafile.txt');

// save data to target file

$dataSaver->save();

// try to print value of private properties

echo 'Target file is the following : '.$dataSaver->filePath.'<br />';

echo 'Data for being saved to target file is the following : '.$dataSaver->data;

 

/* displays the following

Cannot access private property DataSaver::$filePath in path/to/file/

*/

}

catch(Exception $e){

echo $e->getMessage();

exit();

}


In the previous example, the private $data and $filePath properties are erroneously accessed from the global scope, which naturally made the PHP engine fire up a fatal error, as indicated above.

With this final example, I'll assume that you’re already armed with the required background to understand how to declare the level of visibility for the properties defined by a specific PHP 5 class. However, you can use all of the code samples included here to improve your existing skills in this crucial topic.

Final thoughts

Throughout this second part of the series, I provided you with an introductory guide to using private class properties in PHP 5. Nonetheless, there are some additional aspects of this subject that need to be explored in more detail, such as accessing private data members by way of subclasses and accessors.

But all of these interesting topics will be covered in the next part, so you don’t have any excuse to miss it!



 
 
>>> More PHP Articles          >>> More By Alejandro Gervasio
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: