首页 > 解决方案 > 无法在另一个 PHP 中实例化一个类

问题描述

我怎样才能OM在里面建立一个类MySQL_DataMapper

这是 MySQL_DataMapper.php:

<?php
namespace asc {

    include('../../models/OM.php');

    class MySQL_DataMapper
    {
        [omitted code for simplicity]

        public function fetchAllOMs()
        {
            $query = "REALLY LONG QUERY";
            $result = $this->pdo->query($query);
            $OMs = array();
            while ($row = $result->fetch()){
                $OM = new OM($row['id_organizacao_militar'], $row['nome'], $row['sigla'], $row['forca_armada']);
                array_push($OMs, );
            }
            var_dump($OMs);
        }
    }
}

在此处输入图像描述

这是我得到的错误:

Warning: include(../../models/OM.php): failed to open stream: No such file or directory in /home/alekrabbe/PhpstormProjects/stm_asc/controller/database/MySQL_DataMapper.php on line 10

Warning: include(): Failed opening '../../models/OM.php' for inclusion (include_path='.:/usr/share/php') in /home/alekrabbe/PhpstormProjects/stm_asc/controller/database/MySQL_DataMapper.php on line 10

Fatal error: Uncaught Error: Class 'asc\OM' not found in /home/alekrabbe/PhpstormProjects/stm_asc/controller/database/MySQL_DataMapper.php:37 Stack trace: #0 /home/alekrabbe/PhpstormProjects/stm_asc/views/cadastro-militar.php(13): asc\MySQL_DataMapper->fetchAllOMs() #1 {main} thrown in /home/alekrabbe/PhpstormProjects/stm_asc/controller/database/MySQL_DataMapper.php on line 37

我不明白为什么它会失败,因为我只是在另一个 php 文件上这样做并且它在那里工作。谢谢你。

编辑 1

忘了提,但是类 OM.php 也在 asc 命名空间中。

这里是:

<?php
namespace asc{
    class OM
    {
        private $id;
        private $nome;
        private $sigla;
        private $forca_armada;

        public function __construct($id, $nome, $sigla, $forca_armada)
        {
            $this->id = $id;
            $this->nome = $nome;
            $this->sigla = $sigla;
            $this->forca_armada = $forca_armada;
        }

        [Gets and Sets]
    }
}

标签: php

解决方案


你在一个命名空间内:

namespace asc {

所以引用OM成为asc\OM. 通过锚定到根命名空间来解决这个问题:

$OM = new \OM(...);

推荐阅读