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

时间:2015-01-30 23:55:28

标签: php html

我在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;
                        ... 
                }
                .....
 ?>

然后在这里使用命名空间中的类的html表单,我收到错误消息,指出变量&#39; newUrl&#39;是未定义的索引&#39; displaymax&#39;是不分割的。

 <?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版本的命名空间访问我的类?

感谢您对此提供任何帮助!

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

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

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

  myNamespace\UploadFile and \myNamespace\UploadFile...

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

2 个答案:

答案 0 :(得分:0)

UploadFile类位于命名空间myNamespace内,因此要从myNamespace之外引用该类,您需要使用\myNamespace\UploadFile

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

例如:

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

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

答案 1 :(得分:0)

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