甚至无法实例化 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,我刚刚意识到命名空间只是可选的,如果我留空我可以使用全局命名空间。