Home arrow PHP arrow Page 3 - More on Private Methods with PHP 5 Member Visibility

Calling a private method from a subclass - PHP

Welcome to the final chapter of the series, “Protecting the data of PHP 5 classes with member visibility.” Complemented by copious illustrative examples, this article series guides you through learning the key concepts regarding the use of public, protected, and private data members within PHP 5 classes. This way you can start defining the visibility of the properties and methods of your own classes in a very short time.

TABLE OF CONTENTS:
  1. More on Private Methods with PHP 5 Member Visibility
  2. Reintroducing a previous hands-on example
  3. Calling a private method from a subclass
  4. Another way to protect class methods: the final keyword
By: Alejandro Gervasio
Rating: starstarstarstarstar / 2
June 25, 2008

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

As I expressed in the section that you just read, I’d like to finish discussing the use of private methods in PHP 5 by coding yet another demonstrative example. In this particular case, I want you to see for yourself what happens when a private method defined by a parent is invoked by one of its child classes.

So take a look at the following code sample to dissipate any possible doubts:


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


class DataSaver{

protected $filePath;

protected $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

private function getFilePath(){

return $this->filePath;

}

// get data via an accessor

private function getData(){

return $this->data;

}

}


// extends 'DataSaver' class

class DataHandler extends DataSaver{

// fetch data from target file

public function fetch(){

if(!$data=file_get_contents($this->filePath)){

throw new Exception('Error reading data from target file.');

}

return $data;

}

}


try{

// create new instance of 'DataHandler' class

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

// save data to target file

$dataHandler->save();

// call private method

echo $dataHandler->getFilePath();

/* displays the following

Fatal error: Call to private method DataSaver::getFilePath() from context '' in path/to/file/

*/

}

catch(Exception $e){

echo $e->getMessage();

exit();

}


As you can see, I first derived a basic subclass from the “DataSaver” parent, then created a new instance of it, and finally called its “getFilePath()” method in the global scope. This demonstrates in a nutshell that a private method defined by a base class can’t also be invoked by any of its child classes. Not too difficult to understand, right?

So far, so good. Having explained how the prior hands-on example functions, it’s time to end this discussion of private class methods with PHP 5. But wait a minute! Before I finish, I’d like to point out that PHP 5 provides developers with yet another mechanism for preventing the methods of a base class from being overridden by one or more subclasses.

As you might have guessed, I’m talking about the “final” keyword, whose appropriate utilization will be the final subject of this article. Thus, if you’re interested in learning how to use it within your own classes, jump ahead and read the following section. It’s only one click away.



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

blog comments powered by Disqus
   

PHP ARTICLES

- 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...
- PHP: Building Concrete Validators
- Sanitizing Input with PHP
- Executing Shell Commands with PHP
- Handling File Data with PHP
- File Security and Resources with PHP
- ArrayObject PHP Class Examples
- ArrayObject PHP Class: An Introduction
- Getting File System Data with PHP
- PHP Tools for Working with the File and Oper...
- Working with the File and Operating System w...
- PHP Proxy Patterns: Completing a Blog


© 2003-2012 by Developer Shed. All rights reserved. DS Cluster 3 - Follow our Sitemap

Dev Shed Tutorial Topics: