如何从 php 版本 5.5.12 的命名空间访问我的 class 属性?

How can I access my class properties from a namespace with php version 5.5.12?

我在 Windows 8 台 PC 上使用 WAMPSERVER 2.5 和 PHP 版本 5.5.12。我创建了一个命名空间,当我是 运行 PHP 版本 5.2.12 时它工作正常。升级到 php 版本 5.5.12 后,我收到有关未定义变量的错误消息,我认为这意味着命名空间未被使用。这是我的代码:

在我的 UploadFile.php 文件中我有这个:

 <?php
     namespace myNamespace;

     class UploadFile
     {

           protected $avatarUrl;


    public function getUrl()
     {

          return $this->avatarUrl;

     }


    protected function moveFile($file)
    {
           $filename = isset($this->newName) ? $this->newName : $file['name'];
    echo $file[$key];
    $success = move_uploaded_file($file['tmp_name'], $this->destination . $filename);
    if ($success) {

                    $url='http://westcoastchill.com/dc-esports/images/' . $filename;    
                    $this->avatarUrl=$url;
                        ... 
                }
                .....
 ?>

然后是在命名空间中使用 class 的 html 表单,我在其中收到错误消息,指出变量 'newUrl' 未定义且索引 'displaymax' 未定义。

 <?php 
 require_once 'uploads/src/myNamespace/UploadFile.php';//<------names here
 if (!isset($_SESSION['maxfiles'])) {
     $_SESSION['maxfiles'] = ini_get('max_file_uploads');
     $_SESSION['postmax'] = UploadFile::convertToBytes(ini_get('post_max_size')); 
     $_SESSION['displaymax'] =   UploadFile::convertFromBytes($_SESSION['postmax']); //<------ undifined index

 }



 $max = 50 * 1024;
 $result = array();
 if (isset($_POST['upload'])) {

 $destination = __DIR__ . '/uploads/uploaded/';
 try {
    $upload = new UploadFile($destination);
    $upload->setMaxSize($max);

    $upload->allowAllTypes();
    $upload->upload();
    $result = $upload->getMessages();
    $newUrl=$upload->getUrl();  //<----------- here's the undifined newUrl;

     } catch (Exception $e) {  
    $result[] = $e->getMessage();
     }
 }
  $error = error_get_last();
  $oldUrl=$newUrl;
  ...
 ?>

} 如何从 php 版本 5.5.12 的命名空间访问我的 class?

感谢您对此的任何帮助!

更新:抱歉我在 superclass 之外有 getUrl() 但在我的实际项目中是在正确的位置。所以我尝试了:

  \myNamespace\UploadFile::convertToBytes(ini_get('post_max_size'));...

但我仍然得到同样的错误。我也尝试添加使用:

  myNamespace\UploadFile and \myNamespace\UploadFile...

仍然收到相同的错误消息。问题是我的代码在更新 PHP 之前使用了 using 语句,所以我很好奇为什么仅更新会改变一些事情。

UploadFile class 在命名空间 myNamespace 内,因此要从 myNamespace 外部引用 class,您需要使用 \myNamespace\UploadFile.

如果您已经在全局命名空间中,则不需要前导斜线,但我认为始终使用前导斜线是一个好习惯,因为前导斜线指的是全局命名空间。

例如:

$_SESSION['postmax'] = \myNamespace\UploadFile::convertToBytes(ini_get('post_max_size'));

$upload = new \myNamespace\UploadFile($destination);

问题出在 php.ini 文件的配置上。在研究了更多之后,我尝试关闭 php.ini 文件中的 'display_errors=Off,并使用命名空间和所有内容编写代码 运行。结论:新安装的php.ini文件设置不同。我将进一步探索这些设置,但我的问题已通过关闭错误显示得到解决。显然,这不是一个理想的选项,所以我会在继续前进和阅读文件中可能对我有帮助的其他参数时打开和关闭。