Объявление объекта внутри объекта

e_moon

Новичок
Объявление объекта внутри объекта

Здравствуйте,
перешел с PHP4 на PHP5 и сразу начал получать красоту в виде 500 Internal Server Error.
Проблема в таком небольшом коде, который PHP5 не хочет переваривать:

PHP:
class MySQL
{
...
}
class ReturnContent
{
	var $MySQL;

	function ReturnContent()
	{
		$this->MySQL=new MySQL; // на этой строке вылетает 500 Ошибка
		//... ну и дальше нужно $this->MySQL->Connect() и $this->MySQL->query();
	}
}
new ReturnContent;
Можно конечно объявлять объект MySQL вне класса и получать опотом через global или передавать в конструктор, но все же... В чем беда тут такая? PHP4 был доволен, а 5-й отказывается?
 

LeoKee

Новичок
в приведенном выше не вижу ничего 500...
м.б. выложить весь код?
 

e_moon

Новичок
Автор оригинала: LeoKee
в приведенном выше не вижу ничего 500...
м.б. выложить весь код?
Весь код не помещается в правила форума.
Вот что выдал PHP Expert Debugger:
PHP:
Fatal error: Class 'MySQL' not found in W:\home\localhost\www\ACP\main.php on line 12 PHP Warning: PHP Startup: Unable to load
А вне класса объявляется без проблем. Например так:

PHP:
class MySQL 
{ 
... 
} 
class ReturnContent 
{ 
    var $MySQL; 

    function ReturnContent() 
    {
        global $db;
        $this->MySQL=$db;
 
        //... ну и дальше нужно $this->MySQL->Connect() и $this->MySQL->query(); 
    } 
} 

$db=new MySQL;
new ReturnContent;
 

Fortop

Новичок
e_moon
Версия php?

Код из 1го поста - отрабатывает нормально.
 

Fortop

Новичок
php 5.3.2 все отработало.
Проверять в других версиях - лень.

В консоли
php file.php
и смотрим на результат.

Опкод кешеры и прочая ерунда не стоит случаем?
 

phprus

Moderator
Команда форума
PHP:
phprus@notebook-hp6730b:~/tmp> php -v
PHP 5.3.1 (cli) (built: Dec 30 2009 14:49:06)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
    with XCache v1.3.0, Copyright (c) 2005-2009, by mOo
phprus@notebook-hp6730b:~/tmp> php 7.php
MySQL
ReturnContent
phprus@notebook-hp6730b:~/tmp> cat 7.php
<?php
class MySQL
{
        function __construct() {
                echo "MySQL\n";
        }
}
class ReturnContent
{
    var $MySQL;
    function ReturnContent()
    {
        $this->MySQL=new MySQL;
        echo "ReturnContent\n";
    }
}
new ReturnContent;
Что я делаю не так? Какая версия php и т.д.?
 

Adelf

Administrator
Команда форума
Кстати PHP Expert Debugger мог выдать не совсем то, из-за чего получаем 500.
Мож в конструторе MySQL чтото падает?
 

e_moon

Новичок
Автор оригинала: phprus
PHP:
phprus@notebook-hp6730b:~/tmp> php -v
PHP 5.3.1 (cli) (built: Dec 30 2009 14:49:06)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
    with XCache v1.3.0, Copyright (c) 2005-2009, by mOo
phprus@notebook-hp6730b:~/tmp> php 7.php
MySQL
ReturnContent
phprus@notebook-hp6730b:~/tmp> cat 7.php
<?php
class MySQL
{
        function __construct() {
                echo "MySQL\n";
        }
}
class ReturnContent
{
    var $MySQL;
    function ReturnContent()
    {
        $this->MySQL=new MySQL;
        echo "ReturnContent\n";
    }
}
new ReturnContent;
Что я делаю не так? Какая версия php и т.д.?
Ок, надеюсь, за правила меня пинать не будут. Полный код класса MySQL:
PHP:
class MySQL
{
	function query($query,$type=0)
	{
		if ($type == -1)
		{ 	/* Только UPDATE,INSERT и т.д., не требующие вернуть что-либо*/
			mysql_query($query); return Null;
		}

		$Result = mysql_query($query);
		$Error = mysql_error();

		global $query_count;
		global $queries_used;

		$query_count++;

                if (!empty($Error))
                {
                        die('DB was unable to successfully run a query.<br/>'.$Error.'<p>'.$query.'</p>');
                }
                if ($type == 0)
                {
                        return $Result;
                }
                if ($type == 1)
                {
                        $array = mysql_fetch_array($Result);
                        mysql_free_result($Result);
                        return $array;
                }
                if ($type == 2)
                {
                        $array = mysql_num_rows($Result);
                        mysql_free_result($Result);
                        return $array;
                }
                if ($type == 3)
                {
                        $array = mysql_insert_id();
                        mysql_free_result($Result);
                        return $array;
                }
                mysql_free_result($Result);
  	}

    function Connect()
    {
    	global $Link;
    	if (!@$Link)
    	{
    		if (!($Link = mysql_connect(_DBHOST,_DBUSER,_DBPASS)))
    		die('DB error. Check your settings and try again.');
    		if (!(mysql_select_db(_DBNAME,$Link)))
    		die('DB error.');
    	}
     }
}
Перезапустил Апач. При объявлении new MySQL - как и раньше 500 ошибка.
Но теперь говорит так:
Fatal error: Call to undefined function mysql_connect() in W:\home\localhost\www\SYS\MySQL.php on line 58

Если объявляю объект MySQL вне класса - все нормально.
 
Сверху