Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.07.2015
Сообщений: 61
1

Создание объекта класса

26.05.2016, 16:51. Показов 1010. Ответов 19
Метки нет (Все метки)

Всем здравствуйте!

Научите, пожалуйста, как правильно понимать процесс создания объекта в случае:

PHP
1
2
$class_name = "Foo";        // Имя класса.
$object = new $class_name; // Создание объекта.
Вопрос: переменная $object - это уже сам объект, или же только указатель на объект? (Использовалось ключевое слово new).
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2016, 16:51
Ответы с готовыми решениями:

Чем отличается экземпляр класса от объекта? Что такое экземпляр объекта?
Добрый день! Чем отличается экземпляр класса от объекта? Что такое экземпляр объекта? Вот...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

Создание объекта класса с полем являющимся объектом другого класса
Bill a; cin>>a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у...

Создание объекта класса, который будет содержать указанное количество объектов другого класса
Здравствуйте. Я сейчас только учусь, помогите, пожалуйста. Задача такая: необходимо создать класс...

19
470 / 398 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
26.05.2016, 16:58 2
А в чем разница в Вашем понимании между "самим объектом" и "указателем на объект"?
1
1933 / 1762 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
26.05.2016, 17:19 3
Лучший ответ Сообщение было отмечено George Sirin как решение

Решение

Цитата Сообщение от George Sirin Посмотреть сообщение
Вопрос: переменная $object - это уже сам объект, или же только указатель на объект? (Использовалось ключевое слово new).
В PHP нет такого понятия как "указатель" (подобного указателю в c++). И создавать объекты класса кроме как через new нельзя.
1
0 / 0 / 0
Регистрация: 24.07.2015
Сообщений: 61
26.05.2016, 18:09  [ТС] 4
Спасибо большое за информацию!
0
Эксперт PHP
2985 / 2504 / 1181
Регистрация: 14.05.2014
Сообщений: 7,074
Записей в блоге: 1
26.05.2016, 18:12 5
Цитата Сообщение от George Sirin Посмотреть сообщение
$object - это уже сам объект, или же только указатель на объект?
Это ссылка на объект.
1
502 bad gateway
Эксперт PHP
4532 / 3687 / 1545
Регистрация: 24.04.2014
Сообщений: 10,855
26.05.2016, 18:29 6
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Это ссылка на объект.
В php ссылка это опасный термин. Это то же ссылка на объект
PHP
1
$object = &new $class_name;
но отличается от варианта выше
1
Эксперт PHP
2985 / 2504 / 1181
Регистрация: 14.05.2014
Сообщений: 7,074
Записей в блоге: 1
26.05.2016, 20:05 7
Цитата Сообщение от Jewbacabra Посмотреть сообщение
но отличается от варианта выше
В PHP4 может быть и так, но в PHP 5.3.0 и выше это выведет
Deprecated: Assigning the return value of new by reference is deprecated
А в PHP7 приведет к синтаксической ошибке
Parse error: syntax error, unexpected 'new' (T_NEW)
А все потому что начиная с 5-ой версии объекты по умолчанию передаются по ссылке.
0
502 bad gateway
Эксперт PHP
4532 / 3687 / 1545
Регистрация: 24.04.2014
Сообщений: 10,855
26.05.2016, 20:46 8
Kerry_Jr, Принимается, но
PHP
1
2
3
$a = new StdClass;
$b = &$a;
$c = $a;
В данном случае $b и $c - ссылки на объект, но это разные по своему поведению ссылки
0
Эксперт PHP
2985 / 2504 / 1181
Регистрация: 14.05.2014
Сообщений: 7,074
Записей в блоге: 1
26.05.2016, 21:02 9
Цитата Сообщение от Jewbacabra Посмотреть сообщение
но это разные по своему поведению ссылки
Не хочу холиварить, но попрошу аргументировать.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class SomeClass{
    private $value = 10;
    public function setValue($value)
    {
        $this->value = $value;
    }
    public function getValue()
    {
        return $this->value;
    }
}
 
$a = new SomeClass();
echo $a->getValue(); // вывод 10
$b = &$a;
$c = $a;
$b->setValue(20);
echo ' ', $a->getValue(),' ', $b->getValue(), ' ', $c->getValue(); // вывод 20 20 20
0
502 bad gateway
Эксперт PHP
4532 / 3687 / 1545
Регистрация: 24.04.2014
Сообщений: 10,855
26.05.2016, 21:13 10
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Не хочу холиварить, но попрошу аргументировать.
PHP
1
2
3
4
5
6
7
8
9
$a = new StdClass;
$a->var = 1;
 
$b = $a;
echo $a->var, $b->var; // 11
 
$b = new StdClass;
$b->var = 2;
echo PHP_EOL, $a->var, $b->var; // 12
PHP
1
2
3
4
5
6
7
8
9
$a = new StdClass;
$a->var = 1;
 
$b = &$a;
echo $a->var, $b->var; // 11
 
$b = new StdClass;
$b->var = 2;
echo PHP_EOL, $a->var, $b->var; // 22
1
Kerry_Jr
26.05.2016, 21:28
  #11

Не по теме:

Jewbacabra, 1 - Передача ссылки по значению
2 - Передача ссылки по ссылке
:D

0
Jewbacabra
26.05.2016, 21:48
  #12

Не по теме:

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Jewbacabra, 1 - Передача ссылки по значению
2 - Передача ссылки по ссылке
Может оно и так, но только любому новичку это взорвет мозг

0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
26.05.2016, 22:40 13
а разве переменные-объекты хоть когда-то передавались по значению?Раньше по ссылке передавались.. &new это вообще высказывание не заслуживающее доверия.
0
502 bad gateway
Эксперт PHP
4532 / 3687 / 1545
Регистрация: 24.04.2014
Сообщений: 10,855
26.05.2016, 22:45 14
Цитата Сообщение от wq Посмотреть сообщение
а разве переменные-объекты хоть когда-то передавались по значению?
php4
0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
26.05.2016, 23:04 15
Цитата Сообщение от Jewbacabra Посмотреть сообщение
php4
невозможно объект передать по значению. объект хранит свое состояние, которое известно только самому объекту.хотя php4 не ооп. так, пародия
0
1933 / 1762 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
27.05.2016, 12:35 16
Цитата Сообщение от wq Посмотреть сообщение
невозможно объект передать по значению
А что вообще такое "передать по значению"? Передать по значению - это значит создать копию объекта. Например когда массив или число передаете в функцию (без всяких ссылок) - создается копия объекта внутри функции.

И создать копию экземпляра класса (объекта) также можно:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class A
{
    public $a;
}
 
$a = new A;
$a->a = 123;
$b = clone $a;
$b->a = 456;
 
echo $a->a.$b->a;
Код
123456
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16827 / 6705 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.05.2016, 23:51 17
Цитата Сообщение от pav1uxa Посмотреть сообщение
создавать объекты класса кроме как через new нельзя
кстати, не совсем верно. Приведение типов позволяет получить объект без использования new.
PHP
1
2
3
$a = ['foo' => 'bar'];
$b = (object) $a;
var_dump($a, $b);
0
1933 / 1762 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
28.05.2016, 10:56 18
Цитата Сообщение от KOPOJI Посмотреть сообщение
кстати, не совсем верно. Приведение типов позволяет получить объект без использования new.
Вот класс
PHP
1
2
3
4
5
6
7
8
class A
{
    public $a;
    function __construct ($a)
    {
        $this->a = $a;
    }
}
Создайте его экземпляр без new.

Не по теме:

Да и даже если найдется способ (можно там с сериализациями поиграться) - все это баловство, которое новичку видеть не обязательно и даже вредно... Когда я давал ответ #3, я исходил из того что он будет наиболее правильным для данного пользователя, а не правильным в общем случае...

0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
28.05.2016, 11:10 19
Цитата Сообщение от pav1uxa Посмотреть сообщение
А что вообще такое "передать по значению"? Передать по значению - это значит создать копию объекта. Например когда массив или число передаете в функцию (без всяких ссылок) - создается копия объекта внутри функции.
число или массив - это скалярные типы экземпляры которых не являются объектами.А если массив содержит объекты, то после передачи его копия будет заполнена ссылкам на элементы исходного массива, а не их копиями. И изменения элемента в такой "копии" приведут к изменению в исходном массиве.
Цитата Сообщение от pav1uxa Посмотреть сообщение
И создать копию экземпляра класса (объекта) также можно:
можно. Но когда я говорил, что нельзя передать по значению, имелось ввиду что нет такой синтаксической конструкции для неявного создания копии, при передачи аргумента функции или оператора присвоения. clone - это уже "в ручном режиме". Нельзя так описать функцию, взглянув на сигнатуру которой, можно было бы понять что она работает с копией
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16827 / 6705 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.05.2016, 00:08 20
Цитата Сообщение от pav1uxa Посмотреть сообщение
Создайте его экземпляр без new
в исходной фразе не было ни слова о собственных классах, было о невозможности создать объект без использования ключевого слова new. Ну и да, не стоит забывать о Reflection API.
PHP
1
2
3
4
5
6
7
8
9
10
11
class A
{
    public $a;
    function __construct ($a)
    {
        $this->a = $a;
        echo 'Class "', get_class($this), '" is created';
    }
}
$refClass = new ReflectionClass('A');
$refClass->newInstance('value..');

Не по теме:

А по поводу баловства - а почему бы и нет?
а можно даже и не вызывать конструктор, но создать объект, вызвав метод newInstanceWithoutConstructor()

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2016, 00:08

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Создание объекта класса внутри этого класса
Можно ли улучшить такой код: // C# program to illustrate the // use of object type params ...

Создание объекта класса в методе этого же класса
собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это...

Создание объекта класса
public class MyClass { static int Variable = 1; } //создаю первый объект new...

Создание объекта класса
Я пишу программу, и столкнулся с одной проблемой. Суть следующая. Ниже прикрепил примерную схему...

Создание объекта класса
Начал изучать C# и в самом начале наткнулся на то, что в книгах синтаксис объявления объекта такой:...

Создание объекта класса
Создал свой класс с именем и фамилией, не могу создать объект этого класса, при проверке на ошибки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.