westnblue
westnblue

Reputation: 517

Use php namespace inside function

I get a parse error when trying to use a name space inside my own function

require('/var/load.php');

function go(){

  use test\Class;

    $go = 'ok';
    return $go;
}

    echo go();

Upvotes: 40

Views: 41890

Answers (3)

Robert Sinclair
Robert Sinclair

Reputation: 5416

From what I gather a lot of people are getting this when including a separate function file and trying to use the static method inside that function.. For example in index.php

namespace foo/bar
require('func.php')
f();

and in func.php

function f() {
    StaticClass::static_method();
}

you simply need to declare namespace foo/bar in func.php (same like how you declared it in index.php) so instead of the above it should look like:

namespace foo\bar
function f() {
    StaticClass::static_method();
}

to avoid errors like:

Fatal error: Uncaught Error: Class 'StaticClass' not found in func.php

It's obvious now but I was confused why func.php does not carry over the namespace declaration inside the file that 'requires' func.php

Upvotes: 0

Nishant
Nishant

Reputation: 3694

From Scoping rules for importing

The use keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations. This is because the importing is done at compile time and not runtime, so it cannot be block scoped

So you should put like this, use should specified at the global level

require('/var/load.php');
use test\Class;

function go(){
    $go = 'ok';
    return $go;
}
echo go();

Check the example 5 in the below manual Please refer to its manual at http://php.net/manual/en/language.namespaces.importing.php

Upvotes: 63

lonesomeday
lonesomeday

Reputation: 237845

From the manual:

The use keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations.

Upvotes: 6

Related Questions