Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с классами
Форум программистов > Интернет и сети > Web-программирование > PHP программирование
Demonn
Здравствуйте уважаемые форумчане.
Пишу проект и недавно столкнулся со странной проблемой.

Вот пример вызова методов

CODE
<?php
class n1{
protected $a;
function __construct($a){
$this->a = $a;
}
function return1(){
echo $this->a;
}
}

class n2{
function return1(){
echo 'n2_here';
}
}

class n3{
function return1(){
echo 'n3_here';
}
}

$n1 = new n1('param for n1');

$n2 = new n2();
$n3 = new n3();

class nn{
public function returnn(){
echo '<br>n1---' .n1::return1();
echo '<br>n2---' .n2::return1();
echo '<br>n3---' .n3::return1();
}
}

$nn = new nn();
$nn->returnn();
?>


должно выводить:

n1---param for n1
n2---n2_here
n3---n3_here

а выводит:

n1---n2_here
n2---n3_here
n3---

Как по вашему, в чём здесь проблема и как её можно решить?
Я пытался передать в конструкторы ссылку на массив ссылок на все объекты чтобы потом через эту ссылку можно было обращаться к методам другого класса. Пишет что нельзя обращаться к методу не в контексте его класса. Ну это понятно почему..
Пытался играться с namespace но эффекта не получил.
Как будто контексты как-то затираются что-ли.

мой софт: apache 1.3.3, php 5.2
destr
Ну и что, что Вы создали их
$n1 = new n1('param for n1');

$n2 = new n2();
$n3 = new n3();

В классе nn они причём? Может я что не понимаю.
Demonn
Цитата(destr @ 25:06:2008, 21:43 ) *
Ну и что, что Вы создали их
$n1 = new n1('param for n1');

$n2 = new n2();
$n3 = new n3();

В классе nn они причём? Может я что не понимаю.


Оператор :: позволяет обращаться к методам этих классов.
destr
Ну пожалуйста, но объект то не создан в классе nn. Может я чё не догоняю конечно:)
Demonn
Цитата(destr @ 25:06:2008, 22:03 ) *
Ну пожалуйста, но объект то не создан в классе nn. Может я чё не догоняю конечноsmile.gif


Такая конструкция
ClassName::Method();
позволяет получить доступ к пространству имени класса ClassName и получить доступ к методу Method()
Andrew Stephanoff
раз вы используете статичные свойства и методы, будьте добры объявить их статичными (интерпретатор должен ругаться на это, смторим логи)
<?php

class n1 {
    static private $a;
    
    public function __construct($a = null) {
        self::$a = $a;
    }
    static public function output() {
        return self::$a;
    }
}

class n2 {
    static public function output() {
        return 'n2_here';
    }
}

class n3 {
    static public function output() {
        return 'n3_here';
    }
}

$n1 = new n1('param for n1');
$n2 = new n2();
$n3 = new n3();

class nn {
    static public function output() {
        echo '<br>n1---'.n1::output();
        echo '<br>n2---'.n2::output();
        echo '<br>n3---'.n3::output();
    }
}

nn::output();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.