命名空间访问非类文件的方法出错

yanbingyun1990
  • 236

给不是类的文件function.php的文件设置命名空间,例如<? namespace psrpr

         function str(){}
    ?>

在另外的文件中use psrpr
然后prstr()报错是什么原因呢?如果function.php是个类文件,然后use 到这个类再去调用str方法不会报错。

回复
阅读 1.5k
1 个回答
冉五五
  • 60

改成这样试试:

// psrpr/Str.php

<?php

namespace psrpr;

class Str
{
    public function str()
    {
        echo 'hello world' . PHP_EOL;
    }
}

function str_out_of_class()
{
    echo 'this function out of class.' . PHP_EOL;
}

// psrpr/tests/StrTest.php

<?php

namespace psrpr\tests;

require_once '../Str.php';

use psrpr\Str;

class StrTest
{
    // 测试包含到类中的方法
    public function testStr()
    {
        $str = new Str();
        $str->str();
    }
    
    // 测试没有包含到类中的方法
    public function testFunctionOutOfClass()
    {
        \psrpr\str_out_of_class();
        
    }
}

$doTest = new StrTest();
$doTest->testStr(); // 结果:hello world
$doTest->testFunctionOutOfClass(); // 结果:this function out of class.

项目结构:

psrpr/
├── Str.php
└── tests
    └── StrTest.php

由于命名空间主要是解决脚本中存在相同类名或方法名的情况,所以在引用Str.php文件的时候还需要导入此文件。要想知道怎么自动导入类文件,请参考PHP类的自动加载

宣传栏