Wednesday, July 16, 2014

Static variables in PHP

Declaring a variable with a value inside function as static, is will not re-declare or reassign the value when every time that function will called. That is, the last assigned value will remains on that variable.

<?php
function test()
{
    static $a = 1;
    echo $a;
    if ($a <= 10) {
        ++$a;
        test();
    }
}

test(); // Will print: 1234567891011
test(); // Will print: 11
?>

Note:
1. We can not use any expression on declaring of static variables. Ex: static $a=5+6;  // Is wrong.
2. Declaring a variable as static on outside of function not make sense. Because it will not going to re-call in future, except in some cases like using goto statements.

Tuesday, July 15, 2014

Global variables in PHP

Basic Concept
By declaring a variable as Global(Common), we can access it any where of the program.

In C or C++
Here they don't use any special keyword to denote the variable as global. Say for example you defined  or declared a variable with a name in top of the program, now if you use the same name in any where of your program even inside a function, it will denote that as global variable.

Example 1:
#include<stdio.h>
// Global variables
int A=5;
int B=7;

int Add()
{
return A + B;
}

void main()
{
int answer; // Local variable
answer = Add();
printf("%d\n",answer);   // Output: 12
}

In PHP
Here to use global variable inside a function, first we have to declare it as "global".

Example 2:
<?php
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;
    $b = $a + $b;
}

Sum();
echo $b;   // Output: 3
?>

And one more way is we can use a super global valiable called $GLOBALS, intead of the keyword global.

Example 3:
<?php
$a = 1;
$b = 2;

function Sum()
{
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Sum();
echo $b;   // Output: 3
?>

We could not directly declare a class property as global variable. But we can get global variable under a function inside a class. So it can done by assigning global variable value on a property inside the constructor function.

Example 4:
<?php
$a=5;
class A
{
// private global $a; This is wrong statement. It will not going work.
        privare $a;

function __construct()
{
global $a;
$this->a=$a;
}

 function fun1()
{
global $a;
echo 'value of "a" inside class A is: '.$a;
}
}

$obj=new A();
$obj->fun1();
?>

References:
http://php.net/manual/en/language.variables.scope.php
http://www.codingunit.com/c-tutorial-functions-and-global-local-variables

Monday, July 14, 2014

Class inheritance in PHP

Definition
Creating a new class by inheriting(combining) exist class is called inheritance. By doing this newly created class can access existing classes functions and variables. Here newly created class will be called as sub class or derived class and the class from where it inherited is called as base class or super class.

Example
Books.php:
<?php
class Books // Class name.
{
var $title='5'; // Class variables.
var $price=45;

function __construct() // Constructor.
{
$this->price=100; // Define books's default price is 100.
}

function setTitle($title) // Set title for book.
{
$this->title=$title;
}
function getTitle() // Get tiitle of book.
{
return $this->title;
}

function setPrice($price) // Set price for book.
{
$this->price=$price;
}

function getPrice() // Get price of book.
{
return $this->price;
}

public function name() // A public function.
{
return '<br />Ramasamy Kasi : Public funtion from Books(base) class.';
}

protected function mobileNumber() // A protected function.
{
return '<br />+91 95684575000 : Protected funtion from Books(base) class.';
}

private function password() // A private function.
{
return '<br />bossword : Private funtion from Books(base) class.';
}

protected function getPassword() // Call private function from the same class(Books).
{
return $this->password();
}

function __destruct() // Destructor.
{
echo '<br />Destructor for "'.$this->title.'" Called.'; // Will be called when, there is no further action exist for a object.
}
}
?>

EBooks.php:
<?php
class EBooks extends Books         // Creating new class by combining existing class.
{
var $link;

function setLink($link) // Set link for book.
{
$this->link=$link;
}

function getLink() // Get link for book.
{
return $this->link;
}

function mobileNumber() // Getting mobile number by directly calling base classes protected function 'mobileNumber'.
{
$mob_from_base=Books::mobileNumber();
return $mob_from_base.' - Through EBooks(Sub) Class.';
}

function password() // Getting password by calling one base classes public function 'getPassword'.
{
$pass_from_base=$this->getPassword();
return $pass_from_base.' - Through EBooks(Sub) Class.';
}
}
?>

index.php:
<?php
include 'Books.php'; // Include Books class file.
include 'EBooks.php'; // Include EBooks class file.

$tamil=new Books(); // Creating object.
$tamil->setTitle('Tamil Text Book'); // Set tittle.
$tamil->setPrice(150); // Set price.

$english=new Books();
$english->setTitle('Spoken English');
$english->setPrice(180);

$environment=new Books();
$environment->setTitle('Environmental Science');

$python=new EBooks();
$python->setTitle('Python for Beginners');
$python->setLink('http://python.books/python_begin.html'); // Set link.
$python->setPrice(85);

echo $tamil->getTitle() . ' : ' . $tamil->getPrice().'<br />'; // Display saved title and price.
echo $english->getTitle() . ' : ' . $english->getPrice().'<br />';
echo $environment->getTitle() . ' : ' . $environment->getPrice().'<br />';
echo $python->getTitle() . ' : ' . $python->getPrice() . ' : ' . $python->getLink() . '<br />';

echo Books::name(); // Calling a public function of base class(Books).
echo EBooks::mobileNumber(); // Calling a protected function of base class(Books) by calling public function of sub class(EBooks).
echo $python->password().'<br />'; // Calling a private function of base class(Books) by calling public function of sub class(EBooks).
?>

Output
Tamil Text Book : 150
Spoken English : 180
Environmental Science : 100
Python for Beginners : 85 : http://python.books/python_begin.html

Ramasamy Kasi : Public funtion from Books(base) class.
+91 95684575000 : Protected funtion from Books(base) class. - Through EBooks(Sub) Class.
bossword : Private funtion from Books(base) class. - Through EBooks(Sub) Class.

Destructor for "Python for Beginners" Called.
Destructor for "Environmental Science" Called.
Destructor for "Spoken English" Called.
Destructor for "Tamil Text Book" Called.

Function overloading in PHP with example

General Definition
Defining more than one function with a same name, but different number of parameters or different types of parameters.

In PHP
PHP does not support function overloading directly. That is we cannot create more than one function with a same name under a class, even it has different number of arguments or different data types. But we can do this using a PHP magic method called __call().

__call()
This PHP magic method will be triggered when class object trying to call undefined function(Note: This will not work when we trying to call a undefined function using class name.).
This has two parameters, first one is function name(Undefined function's name which we are trying to call.) and second one is parameters(Undefined function's parameters which we are trying to input.).

Example
<?php
class A
{
function __call($function,$parameters)  // Magic method
{
//echo $function;
//print_r($parameters);
if($function=='test')
{
switch (count($parameters)) {
case "1":
echo 'Test function with one parameters.<br />';
break;

case "2":
echo 'Test function with two parameters.<br />';
break;
case "3":
echo 'Test function with three parameters.<br />';
break;
default:
echo 'Critical Error.<br />';
break;
}
}
else
{
echo $function.' function not exist.<br />';
}
}
}

$a=new A();
$a->test('hi');
$a->test('par1','par2');
$a->test(1,2,3);
$a->sample();
?>

Output
Test function with one parameters.
Test function with two parameters.
Test function with three parameters.
sample function not exist.

Function overriding in PHP with example

Definition
Rewrite the action of function in sub or derived class, which is already in base or super class.

Example
<?php
class Fruits
{
public function taste()
{
return 'Sweet';
}

public function color()
{
return 'Reddish orange';
}
}

class Greaps extends Fruits
{
public function color()  // Overriding color function.
{
return 'Black';
}
}

$greap=new Greaps();
echo 'Taste: '.$greap->taste().'<br />';
echo 'Color: '.$greap->color();
?>

Output:
Taste: Sweet
Color: Black

Notes:
We can avoid method overriding by declaring a function as final.

Thursday, July 10, 2014

Simple OOPs example program using PHP

Class Page: Books.php
<?php
class Books // Class name.
{
var $title='5'; // Class variables.
var $price=45;

function __construct() // Constructor.
{
$this->price=100; // Define books's default price is 100.
}

function setTitle($title) // Set title for book.
{
$this->title=$title;
}
function getTitle() // Get tiitle of book.
{
return $this->title;
}

function setPrice($price) // Set price for book.
{
$this->price=$price;
}
function getPrice() // Get price of book.
{
return $this->price;
}
}
?>

Main Page: index.php
<?php
include 'Books.php'; // Include class file.

$tamil=new Books(); // Creating object.
$tamil->setTitle('Tamil Text Book'); // Set tittle.
$tamil->setPrice(150); // Set price.

$english=new Books();
$english->setTitle('Spoken English');
$english->setPrice(180);

$environment=new Books();
$environment->setTitle('Environmental Science');

echo $tamil->getTitle() . ' : ' . $tamil->getPrice().'<br />'; // Display save title and price.
echo $english->getTitle() . ' : ' . $english->getPrice().'<br />';
echo $environment->getTitle() . ' : ' . $environment->getPrice().'<br />';
?>

Output:
Tamil Text Book : 150
Spoken English : 180
Environmental Science : 100

Tuesday, July 1, 2014

autocomplete - Remove user entered or update data on page refresh.

Situation
On real world we often repopulate user's previously saved data and ask them to update these details.
For example a Profile Page. On here some time user may try to reload the page after altered some data
on form, to get his/her original previous data(which means the data came from server). But browser does not act as he/she thinking. Browser will catch the form data and repopulate what he enter last time, not original data.

Solution
To avoid this we can use a html attribute called autocomplete. Simply set this attribute to false on your form tag.

Example 1:

<form name="profile" id="profile" method="post" action="profile_action" autocomplete="off">

We can use for a particular inputs only, as like below.


Example 2:

<input type="text" name="email" id="email" autocomplete="off" />

Note: By default autocomplete set to on for all.

Learn JavaScript - String and its methods - 16

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>String and it's methods - JS...