Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не передается параметр в конструктор класса. 
:(
    Опции темы
Kotakota
Дата 22.4.2011, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Привет.

Файл index.php

Код

<?php
$myV = 'Hello';
$myClass = new TestClass($myV);
$myClass->run();
?>


Файл TestClass.php

Код

<?php
class TestClass {
public $myVariable;
function __construct($myVariable){
$this->myVariable = $myVariable;
}
public function run() {
// .... blahblah
}
}
?>


При передаче аргумента конструктору возникает следующая ошибка:

Warning: Missing argument 1 for TestClass::__construct() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\TestClass.php on line 3

Notice: Undefined variable: myVariable in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\TestClass.php on line 4


Это сообщение отредактировал(а) Kotakota - 22.4.2011, 10:25
PM MAIL   Вверх
DenWPF
Дата 22.4.2011, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



public myVariable; может нужно $ поставить?

пишет же Undefined variable: myVariable т.е переменная не определена

Это сообщение отредактировал(а) DenWPF - 22.4.2011, 10:18
PM MAIL   Вверх
нуп
Дата 22.4.2011, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Цитата(Kotakota @  22.4.2011,  10:11 Найти цитируемый пост)
public $myVariable;


PM MAIL   Вверх
Kotakota
Дата 22.4.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Это опечатка.
Знак $ там был.
Поправил.

Ошибка актуальна!
PM MAIL   Вверх
ksnk
Дата 22.4.2011, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Kotakota @  22.4.2011,  10:22 Найти цитируемый пост)
Это опечатка.

А больше опечаток нет? Откуда берется Controller,
Цитата(Kotakota @  22.4.2011,  10:11 Найти цитируемый пост)
Missing argument 1 for Controller::__construct() 




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Kotakota
Дата 22.4.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Цитата(ksnk @ 22.4.2011,  10:25)
Цитата(Kotakota @  22.4.2011,  10:22 Найти цитируемый пост)
Это опечатка.

А больше опечаток нет? Откуда берется Controller,
Цитата(Kotakota @  22.4.2011,  10:11 Найти цитируемый пост)
Missing argument 1 for Controller::__construct() 

Исправил.
Больше опечаток нет.

Заметил вот, что:
Код

<?php
class TestClass {
public $myVariable;
function __construct($myVariable=null){
$this->myVariable = $myVariable;
}
public function run() {
// .... blahblah
}
}
?>


Все работает!
И в чем была проблема?

Версия PHP: 5.3

Это сообщение отредактировал(а) Kotakota - 22.4.2011, 10:35
PM MAIL   Вверх
DenWPF
Дата 22.4.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



страно конечно, значит надо инициализировать поля.
PM MAIL   Вверх
Kotakota
Дата 22.4.2011, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Цитата(DenWPF @ 22.4.2011,  10:40)
страно конечно, значит надо инициализировать поля.

Это очень странно.
Переменные в PHP не имеют типа.
Какого типа значения, такого типа будет и переменная...
PM MAIL   Вверх
DenWPF
Дата 22.4.2011, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



5.3 может так и есть.
PM MAIL   Вверх
SneG0K
Дата 22.4.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



PHP Version 5.3.3-1ubuntu9.3
Все в порядке
Код

class TestClass {
public $myVariable;
function __construct($myVariable){
$this->myVariable = $myVariable;
}
public function run() {
// .... blahblah
echo $this->myVariable;
}
}
$myV = 'Hello';
$myClass = new TestClass($myV);
$myClass->run();
phpinfo();

PM WWW Skype   Вверх
Kotakota
Дата 22.4.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Смысл следующий!
От класса TestClass куда передаются аргументы в конструктор наследуются другие классы.
И вот когда вызывается наследуемый класс, то срабатывает конструктор (не понятно почему?) класса родителя.
Естественно, что там $config будет пустая, так-как с index.php уже ничего не передается...
Вот поэтому, когда я поставил __construct($myVariable=null) все сработало без ошибки.
Непонятно почему вызывается конструктор родителя, при вызове класса наследника?
Классы наследники вызываются у меня через Reflection.

Это сообщение отредактировал(а) Kotakota - 22.4.2011, 11:50
PM MAIL   Вверх
SneG0K
Дата 22.4.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Конструктор переопределен? Если нет, то тогда вызывается родительский.

Добавлено через 29 секунд
То что в первом топике никак не связано с наследованием.
PM WWW Skype   Вверх
Kotakota
Дата 22.4.2011, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Цитата(SneG0K @ 22.4.2011,  11:51)
Конструктор переопределен? Если нет, то тогда вызывается родительский.

Добавлено @ 11:51
То что в первом топике никак не связано с наследованием.


Имеется такая структура:

Файл index.php

Код

<?php
$myV = require_once('folder/conf.php');
$myClass = new TestClass($myV);
$myClass->run();
?>



Файл TestClass.php

Код

<?php
class TestClass {
public $myVariable;
public $threeClass;
function __construct($myVariable){
$this->myVariable = $myVariable;
$this->threeClass = new ThreeClass();
}
public function run() {
// .... blahblah
}

public function getThree() {
    return $this->threeClass;
}
}
?>



Файл SomeClass.php

Код

Class SomeClass extends TestClass {

public function someFunction() {

$this->getThree()->threesomeFunction();

}


Файл ThreeClass.php

Код

Class ThreeClass {

public function threesomeFunction() {

//...blahblah

}

}


Когда вызывается метод someFunction() класса SomeClass, происходит вызов конструктора родительского класса TestClass.
Так - как в момент вызова аргумент (myVariable) передающийся в конструктор класса TestClass, не определен, получаем ошибку:

Warning: Missing argument 1 for TestClass::__construct() in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\TestClass.php on line 4
Notice: Undefined variable: myVariable in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\TestClass.php on line 5

Передается этот аргумент в конструктор класса TestClass, только один раз, при вызове index.php.

Делаю дальше.
В файл класса SomeClass дописываю свой конструктор, чтобы он не наследовался по умолчанию и не пытался передать аргумент (myVariable).

Файл SomeClass.php

Код

Class SomeClass extends TestClass {

function __construct(){
    }

public function someFunction() {

$this->getThree()->threesomeFunction();

}


Получаем следующую ошибку:
Fatal error: Call to a member function threesomeFunction() on a non-object in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\SomeClass.php on line 8

Помогите разобраться!
 smile 


Это сообщение отредактировал(а) Kotakota - 24.4.2011, 21:13
PM MAIL   Вверх
Kotakota
Дата 24.4.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Вроде все правильно описал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1143 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.