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