IN MAIN SCOPE THE VALUE OF $xyz IS: string(3) "Cat"

IN NY() THE VALUE OF $xyz IS: string(3) "Dog"

IN BJ() THE VALUE OF $xyz IS: string(3) "Pig"

IN SF() THE VALUE OF $xyz IS: string(7) "Octopus"

IN MAIN SCOPE THE VALUE OF $xyz IS: string(7) "Octopus"

IN NY() THE VALUE OF $xyz IS: int(42)

IN BJ() THE VALUE OF $xyz IS: string(7) "Octopus"


<?php // demo/global_is_bad.php
/**
 * Question: Why is the use of the global keyword "bad?"
 *
 * http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_28367325.html#a39872143
 */
error_reporting(E_ALL);
echo 
'<pre>';

// SCRIPT FROM PROGRAMMER IN NEW YORK:
function NY($v=FALSE)
{
    
// STORES THE VALUE IN THIS NAMED VARIABLE INSIDE THE FUNCTION
    
if (!empty($v)) $xyz $v;
    echo 
PHP_EOL "IN " __FUNCTION__ "() THE VALUE OF \$xyz IS: ";
    
var_dump($xyz);
}

// SCRIPT FROM PROGRAMMER IN BEIJING
function BJ($v=FALSE)
{
    
// PROGRAMMER MAKES THE VARIABLE GLOBAL
    
global $xyz;

    
// STORES THE VALUE IN THIS NAMED VARIABLE INSIDE THE FUNCTION
    
if (!empty($v)) $xyz $v;
    echo 
PHP_EOL "IN " __FUNCTION__ "() THE VALUE OF \$xyz IS: ";
    
var_dump($xyz);
}

// SCRIPT FROM PROGRAMMER IN SAN FRANCISCO
function SF($v=FALSE)
{
    
// PROGRAMMER MAKES THE VARIABLE GLOBAL
    
global $xyz;

    
// STORES THE VALUE IN THIS NAMED VARIABLE INSIDE THE FUNCTION
    
if (!empty($v)) $xyz $v;
    echo 
PHP_EOL "IN " __FUNCTION__ "() THE VALUE OF \$xyz IS: ";
    
var_dump($xyz);
}


// THE VALUE CAN BE SET IN THE MAIN SCOPE OF THE SCRIPT
$xyz 'Cat';
echo 
PHP_EOL "IN MAIN SCOPE THE VALUE OF \$xyz IS: ";
var_dump($xyz);


// THE VALUE IN THE MAIN SCOPE OF THE SCRIPT DOES NOT INFLUENCE THE VALUES IN THE FUNCTIONS
NY('Dog');
BJ('Pig');


// A COMPLETELY NEW ANIMAL, NO LONGER ENCAPSULATED, BUT NOW INJECTED INTO THE MAIN SCRIPT!
SF('Octopus');

// WHAT HAPPENS HERE?
echo PHP_EOL "IN MAIN SCOPE THE VALUE OF \$xyz IS: ";
var_dump($xyz);

// WHAT HAPPENS HERE?
NY(42);
BJ();


// SHOW THE CODE
echo PHP_EOL;
highlight_file__FILE__ );