即使包含也无法实例化类

时间:2017-06-06 21:15:15

标签: php include instantiation

我是PHP的新手,即使我阅读了很多教程和SO帖子,也无法解决问题。 我是一个自定义类(用户),我想在php代码中实例化它,但即使我包含它,我也会收到此错误。

  

致命错误:班级'用户'在第17行的D:\ wamp64 \ www \ MyFirstPhp \ formPhp.php中找不到

请帮我弄清楚我做错了什么。

这是我的用户类:

  <?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类,我想在其中实例化用户类。

    <!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>

4 个答案:

答案 0 :(得分:0)

尝试

$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>

答案 1 :(得分:0)

由于您在类中使用了命名空间,因此您必须使用该命名空间来正确包含User类。

尝试添加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;
?>

答案 2 :(得分:0)

异常已经告诉过你,你的代码有什么问题。没有这样的User课程。如果使用名称空间,并且当前位于另一个名称空间(或没有名称空间),则必须使用完全限定名称。意思是:namespace + classname。

在您的情况下,您必须在类名前加上名称空间infopro,这会导致\infopro\User

$user = new \infopro\User(...);

如果您不想总是使用fqn并且您处于不同的命名空间,您还可以使用use将类名导入到文件的本地范围。

use \infopro\User;

// somewhere later ...
$user = new User(...);

答案 3 :(得分:0)

谢谢,所有回答都很好。 我使用intelij,我刚刚意识到命名空间只是可选的,如果我把它留空,我可以使用全局命名空间。