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

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

  1. Demonn

    Demonn Гость

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

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

    [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 Гость

    Ну и что, что Вы создали их
    $n1 = new n1('param for n1');

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

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

    Demonn Гость

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

    destr Гость

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

    Demonn Гость

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

    Andrew Stephanoff Гость

    раз вы используете статичные свойства и методы, будьте добры объявить их статичными (интерпретатор должен ругаться на это, смторим логи)
    Код (Text):
    <?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. c0de3r
    Ответов:
    5
    Просмотров:
    119
  2. DobermannTT
    Ответов:
    10
    Просмотров:
    133
  3. SoulPaladin
    Ответов:
    3
    Просмотров:
    122
  4. Artael
    Ответов:
    1
    Просмотров:
    109
  5. ENSLER
    Ответов:
    0
    Просмотров:
    102

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