簡體   English   中英

如何使用PHP 5.5.12從命名空間訪問我的類屬性?

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

然后是使用命名空間中的類的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版從命名空間訪問我的類?

感謝您對此的任何幫助!

更新:對不起,我在超類之外有getUrl(),但是在我的實際項目中正確的位置。 所以我嘗試了:

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

但我仍然遇到相同的錯誤。 我也嘗試添加用途:

  myNamespace\UploadFile and \myNamespace\UploadFile...

仍然收到相同的錯誤消息。 關鍵是我的代碼在更新PHP之前已與using語句一起使用,因此我很好奇為什么僅更新會更改某些內容。

UploadFile類位於名稱空間myNamespace ,因此要從myNamespace外部引用該類,您將需要使用\\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文件設置不同。 我將進一步探討這些設置,但是通過關閉錯誤顯示解決了我的問題。 顯然,這不是理想的選擇,因此在前進並閱讀可能對我有幫助的文件中的其他參數時,我將打開和關閉它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM