PHP sınıfı bulunamadı

2 Cevap php

Ben bu soruyu kendi çözüldü. Dosya yanlış lolz oldu.

Herkese Merhaba!

Ben Drupal ve Joomla gibi CMS inşa ediyorum. Ben modül özelliği (eklentileri) üzerinde çalışıyorum, ve ben aşağıdaki hata var:

Fatal error: Class 'settings' not found in C:\wamp\www\SYSTEM\view.php on line 22

İşte benim kod:

start.php

<?php
//First of all, start with some advertisement
header("X-Powered-By:ZOMFG CMS, and ofcourse PHP, but that's less important");
//Then less impotant stuff lololol.
session_start();                                //Start a session
mysql_connect($db_host, $db_user, $db_pass);    //Connect to database
mysql_select_db($db_name);                      //Select a database

//Load core
require_once("core.php");

//Load modules
$res_modules = mysql_query("SELECT * FROM ".$_SERVER["db_prefix"]."modules WHERE enabled=1");
echo mysql_error();
$module_exists = array();
while($row_modules = mysql_fetch_array($res_modules))
{
    //Load module
    $name = $row_modules["name"];
    modules::load_module($name);
    //and initialize it
    eval($name."::init();");
    //Yes, it exists
    $module_exists[$name] = true;
}

//Check if the user wants shit from a module
if(isset($_GET["m"]))//Yes the user want it
{
    //Does the module exist and activated, and has it a function called view?
    if(isset($module_exists[$_GET["m"]]) && method_exists($_GET["m"], "view"))//Yep
    {
        //Load view (should be an array)
        eval("\$module_view = ".$_GET["m"]."::view();");
        if(!is_array($module_view))//Not an array :(
        {
            error::e500module($_GET["m"], $_SERVER["REQUEST_URI"]);
        }
        else//The error would kill the entire script, m'kay
        {
            view::index();
        }
    }
    else//Nope, so display error
    {
        error::e404($_SERVER['REQUEST_URI']);
    }
}

settings.php

<?php
class settings
{
    function get($what)
    {
        $result_get = mysql_query("SELECT value FROM ".$_SERVER["db_prefix"]."settings WHERE key='$what'");
        if(mysql_num_rows($result_get) > 0)
        {
            $row_get = mysql_fetch_array($result_get);
            return $result_get["value"];
        }
        else
        {
            return -1;
        }
    }
}

core.php

<?php
//Load core classes
require_once("settings.php");
require_once("error.php");
require_once("theme.php");
require_once("view.php");
require_once("modules.php");

view.php

<?php
class view
{
    function head()
    {
        include("../THEMES/".settings::get("theme")."/head.php");
    }
    function foot()
    {
        include("../THEMES/".settings::get("theme")."/foot.php");
    }
    function left()
    {
        include("../THEMES/".settings::get("theme")."/left.php");
    }
    function right()
    {
        include("../THEMES/".settings::get("theme")."/right.php");
    }
    function index()
    {
        include("../THEMES/".settings::get("theme")."/index.php");
    }
}

Start.php Açıkçası ilk çalıştırılır. Değil diğer sayfalar veritabanı bilgileri içeren customsettings.php dışında, ondan önce yürütülür. Yukarıda benim kodunda $ _SERVER ["db_prefix"] kullandıysanız ben customsettings.php ayarlanmış bir superglobali gerekli çünkü, o:

customsettings.php

<?php
$db_host = "localhost";         //Database host
$db_user = "root";              //Database user
$db_pass = "you may not know this";         //Database password
$db_name = "zomfg";             //Database name
$_SERVER["db_prefix"] = "zomfg_";//Prefix, needs to be superglobal

Herkes bana yardımcı olabilir misiniz? Bu settings.php dahil edilmeden önce view.php 'nin indeks fonksiyonu denir görünüyor. Bu soru büyük Üzgünüm, ben sadece açık olmak istiyorum. Ayrıca) kötü olduğunu biliyorum (eval söyleme.

Yani ayarları sınıf bulunamadı neden bilmek istiyorum. Eğer daha fazla kaynak kodu gerekiyorsa, bu soruya yorum lütfen.

Edit: does somebody know how I can get rid of the need to use a superglobal?

2 Cevap

Eğer ikisini de içeren bir komut dahil çünkü settings.php view.php kullanılabilir olmasını beklediğiniz rağmen, ben bu genellikle böyle olmadığını bulduk. Sen seçimler bir çift var:

  • require_once her sınıf, her sınıf dosyasına ihtiyaç duyduğu tüm dosyalar
  • o bir ihtiyacı düşünüyor zaman PHP tüm sınıfları bulmak böylece bir __ özdevinimli_yükle fonksiyon yazmak

2. seçenek daha esnektir.

Eğer bilmek istiyorsanız sınıfları get_declared_classes çıktısı deneyin belirli bir yerde mevcuttur ()

Biri bu sorunun üzerine sendeler sadece durumda, ben de bu sorun vardı ve ben php dosyasının adı gerçek dosya içindeki php sınıfın adıyla aynı olduğundan emin yaparak çözdük.

Aptalca, biliyorum.