PHP class not found


PHP class not found



I solved this question my own. The filename was wrong lolz.

Hello everyone!

I'm building a CMS like Drupal and Joomla. I'm working on the module feature (plugins), and I got the following error:

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

Here is my code:

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 is obviously executed first. Not other pages are executed before it, except customsettings.php that contains database information. If I used $_SERVER["db_prefix"] in my code above, it's because I needed a superglobal which is set in customsettings.php:

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 

Can anybody help me? It seems that view.php's index function is called before settings.php is included. Sorry if this question is huge, I just want to be clear. Also don't say eval() is evil, I know.

So I want to know why the settings class could not be found. If you need more source code, please comment to this question.




Defining classes in Java files

1:



Get all instances of a class in PHP
Though you would expect settings.php to be available to view.php because it was included in a script that includes them both, I have found that this usually isn't the case.


First Java program (calculator) problems
You have a couple of choices:.
C# - On classes and memory
  • require_once all the files each class needs in each class file
  • write an __autoload() function so that PHP can find all your classes whenever it thinks it needs one
The 2nd option is more flexible..
Can a php class property be equal to another class property?
If you want to know classes are available from a particular place try outputting get_declared_classes().
Need to route instance calls inside a python class


Casting to Unknown Type When Only Given Class Name as a String of That Type


What are some useful ways to utilize classes in PHP?

2:


The following does not appy in OP's case but might help others.. Check whether your code uses short tags <? instead of <?php and if yes, then check your php.ini for short_open_tag setting.. By default it is off but if you inherit your php installation from someone else....


3:


Just in case somebody stumbles onto this question, I had this problem too and I solved it by making sure that the name of the php file was the same as the name of the php class inside the actual file.. Silly, I know..


4:


There is another problem that may occur and it is worth for anyone to know it.

If you use __autoload() and in the file that holds the class being autoloaded you write your PHP tags incorrectly, it will return a class not found error:. File App.php .
<?  class App extends something {     function __construct()     {      } } ?> 
file index.php .
<?php  function __autoload($classname) {      $filename = "./classes/". 

$classname .".php"; print("Loading $filename<br>\n"); include_once($filename); } $app = new App(); ?>
The above code does not work.

For it to work you need to replace the short opening PHP tag App.php with a long one:.
<?php  class App extends something {     function __construct()     {      } } ?> 
There are many comments that could be made about short tags, the version of PHP used, the php.ini file and the rest of it.

But it is irrelevant.

Just use the long version of the PHP tag.


5:


I had the same issue.

Sometimes it's problem with path.. Instead of:.
require_once('foo.php'); 
Try:.
define('__ROOT__', dirname(dirname(__FILE__))); require_once(__ROOT__ . 

'/your-dir-name/foo.php');



86 out of 100 based on 76 user ratings 326 reviews