• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Demonn
  • Дата начала
D

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
 
D

destr

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

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

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

destr

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

Demonn

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

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

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();
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!