php class

интернет программирование

итак, у меня в php скрипте есть класс. Внутри класса естесственно функции. Но внутри одной функции есть ещё функции (подгружаются в зависимости от модуля).

если вывести на экран переменную, допустим, $this->value внутри функции класса, то переменная нормально отображается (ну а как же есчё) :) но если попытаться вывести эту же переменную ($this->value) внутри функции, которая находится в функции класса, то вылазит ошибка

Fatal error: Using $this when not in object context in \home\test1.ru\www\_include\m\blog\functions.php on line 108

Как бы вам обьяснить то ещё. Ну вот допустим класс:

class example
{
var $value;

function get_content()
{
print $this->value;//здесь всё окей

function test()
{
print $this->value;//а здесь вылазит та самая ошибка
}


}
}

я думаю, как-то же это можно исправить?



Примечание:
Larry0ua

спасибо за ответ. Я думал что я описал всё понятно для всех. Ну видать просто в мозгу засел этот класс, и рассказываю вам о нём как со-разработчикам)

вобщем я тогда расскажу всё подробно.

Я написал свою цмс .(просто не люблю разбираться в чужом коде, и поэтому насписал свою цмс , которая мне понятна полностью. Не осуждайте меня. Я начинающий.).

начало index.php такое:

session_start();
include("общие функции для всей цмс");
include("cms.php");

========cms.php========
<?
class cms
{
var $title;
var $values;
*/
$values:
урл выглядит у меня так:
http://site.ru/+имя_модуля/значение1/значение2/значение3 и тд.
при чём начение1/значение2/значение3 и тд. - ето в .htaccess = $values_arr
так вот массив етих значений - ето explode("/",$values_arr)
/*
var $module;//имя модуля (http://site.ru/+имя модуля/значения для модуля)
var $global_config;// получаю из бд путём while($row=mysql_fetch_assoc($result)){$global_config[$row['name']]=$row['value']}
var $content; //контент страницы

function initialize()
{

$result=mysql_query("SELECT * FROM `config`"); //вот он.... конфиг
while($row=mysql_fetch_assoc($result))
{
$this->global_config[$row['name']]=$row['value'];
}


$this->values=explode("/",$_GET['path']);
if($this->values[0]=="")
{
unset($this->values); //вот values
}

if(is_dir("_include/m/".$this->module) && is_file("_include/m/".$this->module."/functions.php")) //вот загрузка модуля и его функций (есле они вобшще существуют)
{
include("_include/m/".$this->module."/functions.php");
}



}



function load_module($name)
{
$this->module=$name;

ob_start();
if(is_dir("_include/m/".$this->module) && is_file("_include/m/".$this->module."/index.php"))
{
if(is_file("_include/m/".$this->module."/functions.php"))
{
include("_include/m/".$this->module."/functions.php");
}
include("_include/m/".$this->module."/index.php");
}
$this->title="asderwe";
$this->content=ob_get_contents();
ob_end_clean();
return $a;
}





}

?>
======================


тоесь видите? functions.php инклудиться тока если модуль такой запрошен (я думаю что чем меньше функций загружено в память, тем всё быстрей работает. Правильно?)


так вот в functions.php есть дополнительные функции.

И в них я немогу получить переменные из класса.
Если честно я вобще классы всегда презерал, потомучто думал что ето бред полный, но вчера выяснил что они в чём то удобны) ну я такой человек. Сначала ничего не нравится а потом цепляет)

если у вас есть тяга к помощи другим, или вам что-то непонятно, то буду рад если ответите в аське) заранее спасибо. 39-009-49
Ответы:
во первых.
разберитесь со скобками.
У вас получилось, что функция test описана внутри метода get_content. Понятно, что внутри метода $this видим, а внутри функции - нет. Вынесите функцию test за метод. Если надо, сделайте ее приватной, чтоб не мешала.
И следующий раз плз выкладывайте код, вызывающий методы. А то не всегда совсем понятно, что именно у вас не работает.
Вложенные функции не наследует параметров родительской функции, параметры передаются ей точно так же, как и любой другой функции. Хотя вложенные функции не защищены от вызова из других точек сценария, они не могут вызываться до вызова своей родительской функции. При попытке вызвать вложенную функцию раньше вызова родительской функции выводится сообщение об ошибке. Более того, при втором вызове метода родительской функции вложенной функции PHP при выполнении увидит, что ВНУТРЕННЯЯ функция УЖЕ декларирована, с подобающими сообщениями вылетит с ошибкой. Для тех, кто использует Perl, данный момент может показаться ужасающим, и действительно, мы не должны использовать вложенные функции РНР так же, как делают это в Perl.
=Я написал свою цмс .(просто не люблю разбираться в чужом коде, и поэтому насписал свою цмс , которая мне понятна полностью. Не осуждайте меня. Я начинающий.).=


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.