我在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语句,所以我很好奇为什么更新会改变一些事情。
答案 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文件有不同的设置。我将更多地探索设置,但我的问题是通过关闭错误显示解决的。显然这不是一个理想的选项,所以当我继续前进并阅读文件中可能对我有帮助的其他参数时,我会打开和关闭。