Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
1

Массив объектов

19.03.2014, 15:45. Показов 3344. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем, мне нужно создать массив с названиями объектов. И удалять из него объекты при определенном условии. То есть есть класс apple, на основе которого создаются объекты, например $apple1, $apple2 и так далее. Каждый из объектов должен попасть в массив. И при выполнении условия, например $color = green, объект должен удаляться из массива.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2014, 15:45
Ответы с готовыми решениями:

Массив объектов
Метод: static function getAllContact($order){ $result = mysql_query("SELECT...

Jasmine. Имеется массив из N объектов , необходимо проверить, что какие-то M объектов входят в этот массив
Имеется массив из N объектов , необходимо проверить, что какие-то M объектов входят в этот массив....

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в...

Массив объектов базового класса, позволяющий работать с набором объектов — чтение, вывод
Расширить программы с классами. Каждый разработанный класс считать базовым; для каждого такого...

37
177 / 125 / 28
Регистрация: 30.10.2013
Сообщений: 686
19.03.2014, 16:16 2
Лучший ответ Сообщение было отмечено Maksimus1991 как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Register {
    private static $register = [];
    public static function add(Apple $apple) {
        self::$register[] = $apple;
    }
    public static function removeApplesByColor($color) {
        // поиск по цвету и удаление из массива
    }
}
class Apple {
    private $color=null;
    public function __construct($color) {
        $this->color = $color;
    }
    public function getColor(){
        return $this->color;
}
$apple1 = new Apple("green");
$apple2 = new Apple("red");
Register::removeApplesByColor("green");
1
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
19.03.2014, 16:48  [ТС] 3
Спасибо большое, единственное можете пожалуйста пояснить некоторые строчки. Я не понял с функцией add, там указано:
PHP
1
add(Apple $apple)
Что это делает, Обычно ведь в функцию параметры передаются, а тут певое значение это что? И почему не через запятую?

И объясните еще пожалуйста, как из масива удалить именно тот элемент что будет соответствовать условию?
0
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
19.03.2014, 16:58 4
Цитата Сообщение от Maksimus1991 Посмотреть сообщение
add(Apple $apple)
Apple здесь выступает в качестве типа переменной.
Для удаления можно воспользоваться
PHP
1
unset
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
19.03.2014, 17:02  [ТС] 5
То есть это Apple указывает на класс? И выходит запятой там не нужно? Про unset знаю, но, как удалить из массива именно тот объект параметр (цвет), которого равен $color?
0
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
19.03.2014, 17:05 6
да, Apple указывает на класс. Насчет удаления, у вас будет массив $register, делаете цикл в котором проверяете ваше условие, и удаляете как обычный элемент массива
1
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
19.03.2014, 17:08  [ТС] 7
Спасибо, надеюсь разберусь дальше)
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
19.03.2014, 17:14 8
Цитата Сообщение от AmsTaFFix Посмотреть сообщение
private static $register = [];
синглтон. А если потребуется создать несколько экземпляров коллекций - для каждой свой класс создавать?
Цитата Сообщение от AmsTaFFix Посмотреть сообщение
class Register
вообще-то велосипед - в SPL есть класс ArrayObject
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
20.03.2014, 10:38  [ТС] 9
Я все таки не понял функцию add. Она должна формировать массив из поступающих значений. Но мы ведь в эту функцию ничего не передаем. В параметрах указано (Apple $apple). Но в функцию-то ничего не приходит. И можно поподробнее про ArrayObject, может это проще окажется.

Добавлено через 1 час 27 минут
Подскажите, а конструкция $this->_color обязательна? Или если я уже присвоил переменной $_color значение, в условии if можно использовать if($_color = '') без $this ?

Добавлено через 35 минут
Чтобы удалить определенный элемент массива, что нужно сделать? Мне нужно удалить яблоко, у которого скажем состояние съедено. Не вежно, как определить состояние. Допустим есть переменная $status, если она равна "Съедено", нужно удалить из массива тот объект у которого она равна этому значению.

Добавлено через 14 часов 53 минуты
Подскажите, не работает вторая строчка, пишет не правильный синтаксис ']'. И условие if тоже не работает, пишет syntax error, unexpected T_IF. Тело функции removeApples не заполнено пока, но это не важно.
PHP
1
2
3
4
5
6
7
8
9
10
11
class register extends apple {
    private static $apples= [];
    public static function add(apple $apple) {
        self::$apples[] = $apple;
    }
    if($this->_status == 'Съедено') {
        public static function removeApples() {
            
        }
    }
}
0
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
20.03.2014, 10:43 10
Цитата Сообщение от Maksimus1991 Посмотреть сообщение
private static $apples= [];
замените на
PHP
1
private static $apples=array();
в новых версиях php такой синтаксис не используется
1
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
20.03.2014, 10:49  [ТС] 11
Да, догадался))) А вот с if не пойму. Там дело даже не в условии. Такое ощущение, что где-то ; не хватает.

Добавлено через 3 минуты
Может, кто еще подскажет про ArrayObject, я не совсем понял, этой функцией, получается можно заменить весь класс?
0
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
20.03.2014, 10:52 12
покажите, как объявляете status
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
20.03.2014, 11:02  [ТС] 13
Объявляется соответственно во втором классе apple. Но мне кажется тут в if не в условии проблема, там хоть 2 == 2 напиши, все равно выдает unexpected T_IF

PHP
1
2
3
4
5
public $_status; // статус висит на дереве/упало/Съедено
 
public function __construct($color) {
        $this->_status = 'На дереве';
}
Добавлено через 1 минуту
Что самое интересное, если засунуть данный if в функцию, то все работает нормально.
0
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
20.03.2014, 11:07 14
ну конечно) у вас же есть класс, а у класса могут быть только методы или поля, следовательно вам нужно вставить ваш if в функцию, или вынести эту проверку за пределы класса
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
20.03.2014, 11:09  [ТС] 15
Ой, блин, ну я дурак))) Спасибо!)
0
V@D!k
20.03.2014, 11:11
  #16

Не по теме:

да я и сам что-то с утреца туплю немного :)

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2014, 11:14 17
Цитата Сообщение от V@D!k Посмотреть сообщение
в новых версиях php такой синтаксис не используется
как раз таки, в новых версиях php такой синтаксис позволяется
0
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
20.03.2014, 11:17 18
Цитата Сообщение от KOPOJI Посмотреть сообщение
Сообщение от V@D!k
в новых версиях php такой синтаксис не используется
как раз таки, в новых версиях php такой синтаксис позволяется
значит я немного попутал, у меня когда-то была такая проблемка, и мне сказали, что это зависит от версии
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2014, 11:22 19
Ну да, зависит. В PHP >= 5.4 допустимо использовать [] вместо array
0
177 / 125 / 28
Регистрация: 30.10.2013
Сообщений: 686
20.03.2014, 11:47 20
Цитата Сообщение от Maksimus1991 Посмотреть сообщение
Спасибо большое, единственное можете пожалуйста пояснить некоторые строчки. Я не понял с функцией add, там указано:
PHP
1
add(Apple $apple)
Что это делает, Обычно ведь в функцию параметры передаются, а тут певое значение это что? И почему не через запятую?
И объясните еще пожалуйста, как из масива удалить именно тот элемент что будет соответствовать условию?
как тебе и ответили, это тип переменной. Это, если честно, моя прихоть, люблю когда все точно. Использовать явное указание типа переменной - необязательно.

Цитата Сообщение от ads
синглтон. А если потребуется создать несколько экземпляров коллекций - для каждой свой класс создавать?
как решит автор топика
Цитата Сообщение от ads
вообще-то велосипед - в SPL есть класс ArrayObject
Спасибо, буду иметь его ввиду
Цитата Сообщение от Maksimus1991 Посмотреть сообщение
Подскажите, не работает вторая строчка, пишет не правильный синтаксис ']'.
Прошу прощения, такая конструкция
PHP
1
$array = [];
работает только в PHP >= 5.4 (если я не ошибаюсь)

Не по теме:

блин, писал сообщение, а тут уже вторая страница появилась...

1
20.03.2014, 11:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2014, 11:47
Помогаю со студенческими работами здесь

Масив объектов. Реализовать функцию, которая вернет новый массив объектов с полями id, name и avaragePrice.
Задан маcсив объектов, например: Нужно реализовать функцию, которая вернет новый маcсив,...

В общем как заменить в подборе объектов и так чтобы не сохранял в массив объектов а в лист? с#
Вот код.public static RaycastHit rch; int _my_podbor_switch; public GameObject...

При инициализации массива объектов в одном методе, этот массив объектов не видно в других методах
static public void Load() { BaseObject objs = new BaseObject; //Этот массив!...

Где и как создать массив объектов, чтобы можно было получить доступ к методам этих объектов?
Задача: "в win form кликаю на кнопку (button) и в этот момент в одном из массивов экземпляров...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru