【问题标题】:Problems with namespaces and Call to undefined function in php命名空间问题和调用 php 中未定义的函数
【发布时间】:2015-10-30 13:06:37
【问题描述】:

嗨,我的 index.php 出现问题,每当我转到 http://localhost/blog/admin/index.php 时,我收到一个错误:致命错误:调用 C:\xampp\htdocs\blog\ 中的未定义函数 Blog\DB\connect()第 6 行的 blog.php。在管理文件夹中,我需要我的 blog.php。

index.php

<?php  
 require '../blog.php';
?>

现在在 blog.php 中

<?php

     require 'functions.php';
     require 'db.php';

     $conn = Blog\DB\connect($config);
     if( !$conn )
     {
       die('couldnt connect to the database');
     }

现在在 db.php 中

<?php namespace Blog\DB;

   require 'config.php';

   function connect($config)
   {    
     try{
          $conn = new \PDO('mysql:host=localhost;dbname=blogs', 
          $config['DB_USERNAME'], 
          $config['DB_PASSWRORD']);
          $conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
          return $conn;
         }
     catch(PDOException $e)
     {
         return false;
     }
   } 

【问题讨论】:

  • 你的 index.php 代码在哪里?
  • blog.php 是 index.php ,抱歉我是第一次使用堆栈溢出。
  • 如果我没记错的话,你需要将 blog.php 命名为 index.php 才能有索引可以访问?
  • 是的,我编辑了它,但我真的不明白为什么它说 Call to undefined function connect() only in that admin directory。
  • 您调用函数错误,在 connect($config) 之前删除整个 Blog\DB\ 并包含 db.php。

标签: php namespaces


【解决方案1】:

最终,您需要像这样拥有全局命名空间

$conn = \Blog\DB\connect($config); // mind the \ before Blog

或者根本没有定义函数(connect() 即)。

【讨论】:

  • 不,我试过了,我没有工作,抱歉 blog.php 是 index.php。
【解决方案2】:

当你调用函数时,你是从你的 blog.php 调用一个函数,而不是错误指示的 db.php。为了解决这个问题,您必须包含 db.php(可能已经包含在 require 中),然后正常调用该函数,例如

include db.php
$conn = connect($config)

【讨论】:

  • 我做了同样的事情,但它不起作用不知道为什么?
  • 没什么@General Charismo
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2018-09-06
相关资源
最近更新 更多