甚至无法实例化 class
Can't instantiate class even included
我是 PHP 的新手,即使我阅读了很多教程和 SO 帖子也无法解决问题。
我有一个自定义 class(用户),我想在 php 代码中实例化它,但即使我包含它,我也会收到此错误。
Fatal error: Class 'User' not found in D:\wamp64\www\MyFirstPhp\formPhp.php on line 17
请帮我找出我做错了什么。
这是我的用户 class:
<?php
/**
* Created by IntelliJ IDEA.
* User: molnard
* Date: 2017. 06. 06.
* Time: 15:36
*/
namespace infopro;
class User
{
private $username;
private $userage;
private $sex;
public function __construct($username, $userage, $sex)
{
if (!is_null($username)) $this->username = $username;
if (!is_null($userage)) $this->userage = $this->userage;
if (!is_null($sex)) $this->sex = $sex;
}
/**
* @return mixed
*/
public function getUsername()
{
return $this->username;
}
/**
* @param mixed $username
*/
public function setUsername($username)
{
$this->username = $username;
}
/**
* @return mixed
*/
public function getUserage()
{
return $this->userage;
}
/**
* @param mixed $userage
*/
public function setUserage($userage)
{
$this->userage = $userage;
}
/**
* @return mixed
*/
public function getSex()
{
return $this->sex;
}
/**
* @param mixed $sex
*/
public function setSex($sex)
{
$this->sex = $sex;
}
}
?>
这是我的 form.php class,我想在其中实例化用户 class。
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form php</title>
</head>
<body>
<?php
include("User.php");
$name = $_POST["name"];
$age = $_POST["age"];
$sex = $_POST["sex"];
echo "New user<br>name: " . $name . "<br>" .
"age: " . $age . "<br>" . "sex: " . $sex."<br>";
$newuser = new User($name, $age, $sex);
$newAge = $newuser->getAge();
echo $newAge;
?>
</body>
</html>
尝试
$newuser = new \infopro\User($name, $age, $sex);
或者
<?php
use \infopro\User;
?>
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form php</title>
</head>
<body>
<?php
include("User.php");
$name = $_POST["name"];
$age = $_POST["age"];
$sex = $_POST["sex"];
echo "New user<br>name: " . $name . "<br>" .
"age: " . $age . "<br>" . "sex: " . $sex."<br>";
$newuser = new User($name, $age, $sex);
$newAge = $newuser->getAge();
echo $newAge;
?>
</body>
</html>
由于您在 class 中使用命名空间,因此您必须使用该命名空间来正确包含用户 class。
尝试添加 use \infopro\User;
:
`
<?php
include "User.php";
use \infopro\User;
$name = 'talib';
$age = '29';
$sex = 'male';
echo "New user<br>name: " . $name . "<br>" .
"age: " . $age . "<br>" . "sex: " . $sex."<br>";
$newuser = new User($name, $age, $sex);
$newAge = $newuser->getUserage();
echo $newAge;
?>
异常已经告诉你,你的代码有什么问题。没有这样的 User
class。如果您使用名称空间,并且您当前在另一个名称空间(或没有名称空间)中,则必须使用完全限定名称。意思是:命名空间+classname.
在您的情况下,您必须在 class 名称前加上命名空间 infopro
,这导致 \infopro\User
$user = new \infopro\User(...);
如果您不想始终使用 fqn 并且您处于不同的命名空间中,您还可以将 class 名称导入到具有 use
的文件的本地范围中。
use \infopro\User;
// somewhere later ...
$user = new User(...);
谢谢,所有答案都很好。
我用的是intellij,我刚刚意识到命名空间只是可选的,如果我留空我可以使用全局命名空间。
我是 PHP 的新手,即使我阅读了很多教程和 SO 帖子也无法解决问题。 我有一个自定义 class(用户),我想在 php 代码中实例化它,但即使我包含它,我也会收到此错误。
Fatal error: Class 'User' not found in D:\wamp64\www\MyFirstPhp\formPhp.php on line 17
请帮我找出我做错了什么。
这是我的用户 class:
<?php
/**
* Created by IntelliJ IDEA.
* User: molnard
* Date: 2017. 06. 06.
* Time: 15:36
*/
namespace infopro;
class User
{
private $username;
private $userage;
private $sex;
public function __construct($username, $userage, $sex)
{
if (!is_null($username)) $this->username = $username;
if (!is_null($userage)) $this->userage = $this->userage;
if (!is_null($sex)) $this->sex = $sex;
}
/**
* @return mixed
*/
public function getUsername()
{
return $this->username;
}
/**
* @param mixed $username
*/
public function setUsername($username)
{
$this->username = $username;
}
/**
* @return mixed
*/
public function getUserage()
{
return $this->userage;
}
/**
* @param mixed $userage
*/
public function setUserage($userage)
{
$this->userage = $userage;
}
/**
* @return mixed
*/
public function getSex()
{
return $this->sex;
}
/**
* @param mixed $sex
*/
public function setSex($sex)
{
$this->sex = $sex;
}
}
?>
这是我的 form.php class,我想在其中实例化用户 class。
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form php</title>
</head>
<body>
<?php
include("User.php");
$name = $_POST["name"];
$age = $_POST["age"];
$sex = $_POST["sex"];
echo "New user<br>name: " . $name . "<br>" .
"age: " . $age . "<br>" . "sex: " . $sex."<br>";
$newuser = new User($name, $age, $sex);
$newAge = $newuser->getAge();
echo $newAge;
?>
</body>
</html>
尝试
$newuser = new \infopro\User($name, $age, $sex);
或者
<?php
use \infopro\User;
?>
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form php</title>
</head>
<body>
<?php
include("User.php");
$name = $_POST["name"];
$age = $_POST["age"];
$sex = $_POST["sex"];
echo "New user<br>name: " . $name . "<br>" .
"age: " . $age . "<br>" . "sex: " . $sex."<br>";
$newuser = new User($name, $age, $sex);
$newAge = $newuser->getAge();
echo $newAge;
?>
</body>
</html>
由于您在 class 中使用命名空间,因此您必须使用该命名空间来正确包含用户 class。
尝试添加 use \infopro\User;
:
`
<?php
include "User.php";
use \infopro\User;
$name = 'talib';
$age = '29';
$sex = 'male';
echo "New user<br>name: " . $name . "<br>" .
"age: " . $age . "<br>" . "sex: " . $sex."<br>";
$newuser = new User($name, $age, $sex);
$newAge = $newuser->getUserage();
echo $newAge;
?>
异常已经告诉你,你的代码有什么问题。没有这样的 User
class。如果您使用名称空间,并且您当前在另一个名称空间(或没有名称空间)中,则必须使用完全限定名称。意思是:命名空间+classname.
在您的情况下,您必须在 class 名称前加上命名空间 infopro
,这导致 \infopro\User
$user = new \infopro\User(...);
如果您不想始终使用 fqn 并且您处于不同的命名空间中,您还可以将 class 名称导入到具有 use
的文件的本地范围中。
use \infopro\User;
// somewhere later ...
$user = new User(...);
谢谢,所有答案都很好。 我用的是intellij,我刚刚意识到命名空间只是可选的,如果我留空我可以使用全局命名空间。