1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Проблема с классами

Тема в разделе "Web - программирование", создана пользователем Demonn, 26 июн 2008.

  1. Demonn

    Demonn Гость

    Репутация:
    0
    Здравствуйте уважаемые форумчане.
    Пишу проект и недавно столкнулся со странной проблемой.

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

    [codebox]<?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();
    ?> [/codebox]

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

    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
     
  2. destr

    destr Гость

    Репутация:
    0
    Ну и что, что Вы создали их
    $n1 = new n1('param for n1');

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

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

    Demonn Гость

    Репутация:
    0
    Оператор :: позволяет обращаться к методам этих классов.
     
  4. destr

    destr Гость

    Репутация:
    0
    Ну пожалуйста, но объект то не создан в классе nn. Может я чё не догоняю конечно:)
     
  5. Demonn

    Demonn Гость

    Репутация:
    0
    Такая конструкция
    ClassName::Method();
    позволяет получить доступ к пространству имени класса ClassName и получить доступ к методу Method()
     
  6. Andrew Stephanoff

    Andrew Stephanoff Гость

    Репутация:
    0
    раз вы используете статичные свойства и методы, будьте добры объявить их статичными (интерпретатор должен ругаться на это, смторим логи)
    Код:
    <?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();
     
Загрузка...
Похожие Темы - Проблема классами
  1. bb-8
    Ответов:
    1
    Просмотров:
    31
  2. Apton
    Ответов:
    0
    Просмотров:
    38
  3. Anonimyc
    Ответов:
    0
    Просмотров:
    26
  4. VikTor1990
    Ответов:
    3
    Просмотров:
    81
  5. erlan1749
    Ответов:
    0
    Просмотров:
    40

Поделиться этой страницей