【问题标题】:Error autoloading namespace in another namespace在另一个命名空间中自动加载命名空间时出错
【发布时间】:2019-10-10 14:52:58
【问题描述】:

尝试从c_index.php 调用m_newEmployee 时出现以下错误。

我试过了:

$employee = new \App\model\newEmployee;

但这在m_newEmployee 中引起了另一个奇怪的错误。

当我这样做时,函数getEmployees() 不能用于创建任何对象。

c_index.php

<?php

namespace app\controller;

use app\model;

require_once "../task/vendor/autoload.php";
  /**
   *
   */
  class c_index
  {

      function loadEmployees()
      {
         $employee = new m_newEmployee;
         echo $employee->getEmployees();
      }


  }


 ?>

m_newEmployee.php

<?php

namespace app\model;
require_once "../task/vendor/autoload.php";
/**
 *
 */
class m_newEmployee
{
    function createTable()
    {
        $database = new m_database;
        $conn = $database->connect();

        // sql to create table
        $sql = "CREATE TABLE IF NOT EXISTS employees (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        employee VARCHAR(255) NOT NULL,
        created TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        )";

        if ($conn->query($sql) === TRUE) {
            //echo "Table MyGuests created successfully";
        } else {
            echo "Error creating table: " . $conn->error;
        }

        $conn->close();
    }


  function createEmployee($employee)
  {

      $this->createTable();
       $sql = "INSERT INTO `employees`( `employee`) VALUES ('$employee')";
       if ($conn->query($sql) === TRUE) {

           $result = true;
           return $result;
       } else {
           echo "Error inserting  " . $conn->error;
       }
  }


  function getEmployees()
  {
      $database = new m_database;
      $conn = $database->connect();

      $sql = "SELECT * FROM `employees`";
      if ($result = $conn->query($sql) === TRUE) {

            //Initialize array variable
            $dbdata = array();

          //Fetch into associative array
            while ( $row = $result->fetch_assoc())  {
            $dbdata[]=$row;
            }

          //Print array in JSON format
           return json_encode($dbdata);
      }

      else {
          echo "Error inserting  " . $conn->error;
      }
    }
  }

composer.json

{
  "autoload":{
    "psr-4":{
      "":"app",
       "App\\":"app"
    }
}

}

致命错误:未捕获的错误:在 C:\xampp\htdocs\task\app\controller\c_index.php:16 中找不到类“m_newEmployee”:16 堆栈跟踪:#0 C:\xampp\htdocs\task\index。 php(14): app\controller\c_index->​​loadEmployees() #1 {main} 在第 16 行的 C:\xampp\htdocs\task\app\controller\c_index.php 中抛出

【问题讨论】:

  • m_newEmployee.phpmodel 文件夹中?看起来您在命名空间中混合大小写,大多数地方是 app,但在您的自动加载器中是 App,我认为这可能是问题所在。

标签: php composer-php psr-4


【解决方案1】:

导入命名空间 (use app\model;) 并不意味着您可以直接使用此命名空间中的模型。您需要指定命名空间(使用导入的短名称):

namespace app\controller;
use app\model;
// ...
$employee = new model\m_newEmployee();

或者直接导入模型:

namespace app\controller;
use app\model\m_newEmployee;
// ...
$employee = new m_newEmployee();

【讨论】:

  • 那么你也有自动加载的问题。确保命名空间和类名与文件路径(包括大小写)匹配,并尝试从 composer.json 中删除 "":"app",
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2013-11-25
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多