dousi6303
dousi6303
2015-01-30 23:55
浏览 20
已采纳

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

I'm using WAMPSERVER 2.5 and PHP version 5.5.12 on Windows 8 PC. I created a namespace which worked ok when I was running PHP version 5.2.12. After upgrading to php version 5.5.12 I'm getting error message about undefined variables which I think means that the namespace is not being used. Here's what my code looks like:

In my UploadFile.php file I have this:

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

Then here's the html form that uses the class in the namespace where I get the error messages that states that the variable 'newUrl' is undefined and the index 'displaymax' is undifined.

 <?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;
  ...
 ?>

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

Thanks for any help with this!

UPDATE: Sorry I had getUrl() outside of superclass but in my actual project is in the correct place. So I tried:

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

but I still get the same error. I also tried adding use:

  myNamespace\UploadFile and \myNamespace\UploadFile...

still getting the same error message. The thing is my code worked with the using statement before I updated PHP so I'm curious why just an update would change things.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongyun3805
    dongyun3805 2015-02-01 17:34
    已采纳

    The issue was the configuration of the php.ini file. After researching more I tried turning off 'display_errors=Off in the php.ini file and the code the code ran using the namespace and everything. Conclusion: the php.ini file of the new installation different settings. I'll explore the settings more but my problem was solved by turning off error displaying. Obviously this is not a desired option so I'll toggle on and off as I go forward and read up on other parameters in the file that may help me.

    点赞 评论
  • dongpu1879
    dongpu1879 2015-01-31 00:00

    UploadFile class is within the namespace myNamespace, so to reference the class from outside of myNamespace, you would need to use \myNamespace\UploadFile.

    If you are already in the global namespace, you don't need the leading slash, but I think it's good practice to always use the leading slash, since the leading slash refers to the global namespace.

    Ex:

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

    and

    $upload = new \myNamespace\UploadFile($destination);
    
    点赞 评论

相关推荐