<?php
class PropertyTest
{
    /**  Location for overloaded data.  */
    private $data = array();

    /**  Overloading not used on declared properties.  */
    public $declared = 1;

    /**  Overloading only used on this when accessed outside the class.  */
    private $hidden = 2;

    public function __set($name, $value)
    {
        echo "Setting '$name' to '$value'n";
        $this->data[$name] = $value;
    }

    public function __get($name)
    {
        echo "Getting '$name'n";
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }

        $trace = debug_backtrace();
        trigger_error(
            'Undefined property via __get(): ' . $name .
            ' in ' . $trace[0]['file'] .
            ' on line ' . $trace[0]['line'],
            E_USER_NOTICE);
        return null;
    }

    /**  As of PHP 5.1.0  */
    public function __isset($name)
    {
        echo "Is '$name' set?n";
        return isset($this->data[$name]);
    }

    /**  As of PHP 5.1.0  */
    public function __unset($name)
    {
        echo "Unsetting '$name'n";
        unset($this->data[$name]);
    }

    /**  Not a magic method, just here for example.  */
    public function getHidden()
    {
        return $this->hidden;
    }
}

echo "<pre>n";

$obj = new PropertyTest;

$obj->a = 1;
echo $obj->a . "nn";

var_dump(isset($obj->a));
unset($obj->a);
var_dump(isset($obj->a));
echo "n";

echo $obj->declared . "nn";

echo "Let's experiment with the private property named 'hidden':n";
echo "Privates are visible inside the class, so __get() not used...n";
echo $obj->getHidden() . "n";
echo "Privates not visible outside of class, so __get() is used...n";
echo $obj->hidden . "n";
?>

The above example will output:

Setting 'a' to '1'

Getting 'a'

1



Is 'a' set?

bool(true)

Unsetting 'a'

Is 'a' set?

bool(false)



1



Let's experiment with the private property named 'hidden':

Privates are visible inside the class, so __get() not used...

2

Privates not visible outside of class, so __get() is used...

Getting 'hidden'





Notice:  Undefined property via __get(): hidden in <file> on line 70 in <file> on line 29

<?php
class PropertyTest
{
    
/**  Location for overloaded data.  */
    
private $data = array();

    /**  Overloading not used on declared properties.  */
    
public $declared 1;

    /**  Overloading only used on this when accessed outside the class.  */
    
private $hidden 2;

    public function __set($name$value)
    {
        echo 
"Setting '$name' to '$value'n";
        
$this->data[$name] = $value;
    }

    public function __get($name)
    {
        echo 
"Getting '$name'n";
        if (
array_key_exists($name$this->data)) {
            return 
$this->data[$name];
        }

        $trace debug_backtrace();
        
trigger_error(
            
'Undefined property via __get(): ' $name .
            
' in ' $trace[0]['file'] .
            
' on line ' $trace[0]['line'],
            
E_USER_NOTICE);
        return 
null;
    }

    /**  As of PHP 5.1.0  */
    
public function __isset($name)
    {
        echo 
"Is '$name' set?n";
        return isset(
$this->data[$name]);
    }

    /**  As of PHP 5.1.0  */
    
public function __unset($name)
    {
        echo 
"Unsetting '$name'n";
        unset(
$this->data[$name]);
    }

    /**  Not a magic method, just here for example.  */
    
public function getHidden()
    {
        return 
$this->hidden;
    }
}

echo "<pre>n";

$obj = new PropertyTest;

$obj->1;
echo 
$obj->"nn";

var_dump(isset($obj->a));
unset(
$obj->a);
var_dump(isset($obj->a));
echo 
"n";

echo $obj->declared "nn";

echo "Let's experiment with the private property named 'hidden':n";
echo 
"Privates are visible inside the class, so __get() not used...n";
echo 
$obj->getHidden() . "n";
echo 
"Privates not visible outside of class, so __get() is used...n";
echo 
$obj->hidden "n";
?>

The above example will output:

Setting 'a' to '1'

Getting 'a'

1



Is 'a' set?

bool(true)

Unsetting 'a'

Is 'a' set?

bool(false)



1



Let's experiment with the private property named 'hidden':

Privates are visible inside the class, so __get() not used...

2

Privates not visible outside of class, so __get() is used...

Getting 'hidden'





Notice:  Undefined property via __get(): hidden in <file> on line 70 in <file> on line 29

<?php
class PropertyTest
{
    
/**  Location for overloaded data.  */
    
private $data = array();

    /**  Overloading not used on declared properties.  */
    
public $declared 1;

    /**  Overloading only used on this when accessed outside the class.  */
    
private $hidden 2;

    public function __set($name$value)
    {
        echo 
"Setting '$name' to '$value'n";
        
$this->data[$name] = $value;
    }

    public function __get($name)
    {
        echo 
"Getting '$name'n";
        if (
array_key_exists($name$this->data)) {
            return 
$this->data[$name];
        }

        $trace debug_backtrace();
        
trigger_error(
            
'Undefined property via __get(): ' $name .
            
' in ' $trace[0]['file'] .
            
' on line ' $trace[0]['line'],
            
E_USER_NOTICE);
        return 
null;
    }

    /**  As of PHP 5.1.0  */
    
public function __isset($name)
    {
        echo 
"Is '$name' set?n";
        return isset(
$this->data[$name]);
    }

    /**  As of PHP 5.1.0  */
    
public function __unset($name)
    {
        echo 
"Unsetting '$name'n";
        unset(
$this->data[$name]);
    }

    /**  Not a magic method, just here for example.  */
    
public function getHidden()
    {
        return 
$this->hidden;
    }
}

echo "<pre>n";

$obj = new PropertyTest;

$obj->1;
echo 
$obj->"nn";

var_dump(isset($obj->a));
unset(
$obj->a);
var_dump(isset($obj->a));
echo 
"n";

echo $obj->declared "nn";

echo "Let's experiment with the private property named 'hidden':n";
echo 
"Privates are visible inside the class, so __get() not used...n";
echo 
$obj->getHidden() . "n";
echo 
"Privates not visible outside of class, so __get() is used...n";
echo 
$obj->hidden "n";
?>

The above example will output:

Setting 'a' to '1'

Getting 'a'

1



Is 'a' set?

bool(true)

Unsetting 'a'

Is 'a' set?

bool(false)



1



Let's experiment with the private property named 'hidden':

Privates are visible inside the class, so __get() not used...

2

Privates not visible outside of class, so __get() is used...

Getting 'hidden'





Notice:  Undefined property via __get(): hidden in <file> on line 70 in <file> on line 29

http://stackoverflow.com/questions/4697705/php-function-overloading 에서 참조

You can only overload class methods, but not functions. See php.net/manual/en/language.oop5.overloading.php – Spechal

You cannot overload PHP functions. Function signatures are based only on their names and do not include argument lists, so you cannot have two functions with the same name. Class method overloading is different in PHP than in many other languages. PHP uses the same word but it describes a different pattern.

You can, however, declare a variadic function that takes in a variable number of arguments. You would use func_num_args() and func_get_arg() to get the arguments passed, and use them normally.

For example:

function myFunc() { for ($i = 0; $i < func_num_args(); $i++) { printf("Argument %d: %sn", $i, func_get_arg($i)); } } /* Argument 0: a Argument 1: 2 Argument 2: 3.5 */ myFunc('a', 2, 3.5);

http://stackoverflow.com/questions/4697705/php-function-overloading 에서 참조

You can only overload class methods, but not functions. See php.net/manual/en/language.oop5.overloading.phpSpechal

You cannot overload PHP functions. Function signatures are based only on their names and do not include argument lists, so you cannot have two functions with the same name. Class method overloading is different in PHP than in many other languages. PHP uses the same word but it describes a different pattern.

You can, however, declare a variadic function that takes in a variable number of arguments. You would use func_num_args() and func_get_arg() to get the arguments passed, and use them normally.

For example:

function myFunc() { for ($i = 0; $i < func_num_args(); $i++) { printf("Argument %d: %sn", $i, func_get_arg($i)); } } /* Argument 0: a Argument 1: 2 Argument 2: 3.5 */ myFunc('a', 2, 3.5);

http://stackoverflow.com/questions/4697705/php-function-overloading 에서 참조

You can only overload class methods, but not functions. See php.net/manual/en/language.oop5.overloading.phpSpechal

You cannot overload PHP functions. Function signatures are based only on their names and do not include argument lists, so you cannot have two functions with the same name. Class method overloading is different in PHP than in many other languages. PHP uses the same word but it describes a different pattern.

You can, however, declare a variadic function that takes in a variable number of arguments. You would use func_num_args() and func_get_arg() to get the arguments passed, and use them normally.

For example:

function myFunc() { for ($i = 0; $i < func_num_args(); $i++) { printf("Argument %d: %sn", $i, func_get_arg($i)); } } /* Argument 0: a Argument 1: 2 Argument 2: 3.5 */ myFunc('a', 2, 3.5);