Can PHP namespaces contain variables?

Solution 1:

No. You can set a variable after declaring a namespace, but variables will always exist in the global scope. They are never bound to namespaces. You can deduce that from the absence of any name resolution descriptions in

  • FAQ: things you need to know about namespaces (PHP 5 >= 5.3.0)

There would also be no allowed syntax to locate variables in a namespace.

print \namespace\$var;      // syntax error

print "${namespace\\var}";  // "unexpected T_NS_SEPARATOR"

Solution 2:

Try this

<?php
namespace App\login; 

$p = 'login';
$test2 = '\App\\'.$p.'\\MyClass';

$test = new $test2;

Solution 3:

No they cannot, as mario said.

To encapsulate variables use Classes. Polluting the global variable space should definitely be avoided.

  • Example

    class_dbworker.php:

    class DbWorker
    {
        //properties and method logic
    }
    
    class DbWorkerData
    {
        public static $hugerelationsmap = array(....);
        public static ....
    }
    

    mainapp.php:

    include_once 'class_dbworker.php';
    print_r( DbWorkerData::$hugerelationsmap );
    
  • Example using namespaces

    class_dbworker.php:

    namespace staticdata;
    class DbWorker
    {
        //properties and method logic
    }
    
    class DbWorkerData
    {
        public static $hugerelationsmap = array(....);
        public static ....
    }
    

    mainapp.php:

    include_once 'class_dbworker.php';
    
    use staticdata as data;
    
    print_r( \data\DbWorkerData::$hugerelationsmap );
    

Solution 4:

It is not possible because $MYVARNAME is still in the global scope. Try following code.

namespace.php

<?php
    namespace MYNAME;
    use MYNAME as M;
    const MYVAR   = 'MYVARNAME';

    ${M\MYVAR}    = date('Y');
    echo $MYVARNAME;  // PRINT YEAR
    $MYVARNAME    = 'X';
    echo $MYVARNAME;  // PRINT X
    echo ${M\MYVAR} ; // PRINT X

    include('file.php');
?>

file.php

<?php
    ${MYNAME\MYVAR}=date('Y');
    echo $MYVARNAME;        // PRINT YEAR
    $MYVARNAME = 'X';
    
    echo $MYVARNAME;        // PRINT X
    echo ${MYNAME\MYVAR};   // PRINT X
    
    include('file2.php');
?>

file2.php

<?php
    namespace MYNAME2;
    use MYNAME2 as N;
    const MYVAR   = 'MYVARNAME';

    ${N\MYVAR}    = 'Y';
    echo $MYVARNAME;  // PRINT Y
    echo ${MYNAME\MYVAR}; /* PRINT Fatal error: Uncaught Error:
    Undefined constant 'MYNAME2\MYNAME\MYVAR' */
?>