Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Каким образом можно в производном классе в перегруженном методе cls2::func1() передать методу cls1::func() параметры $p1, $p2, ..., $pn , если их набор внутри класса cls2 заранее неизвестен ? Т.е. внутри класса cls2 известно имя базового класса cls1 и имя метода cls1::func . При этом набор параметров, получаемый этим методом, неизвестен. Необходимо в производном классе вызвать метод базового класса, передав ему все полученные параметры. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Требования к решению: 1) Базовый класс cls1 менять нельзя. В частности, внутри базового метода cls1::func() нельзя добавлять вызов функции extract() и нельзя добавлять объявления global $p1, global $p2, ..., global $pn . 2) Нельзя использовать функцию eval() Позволяют ли возможности php решить данную задачу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 15:32 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 15:40 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
http://php.net/manual/ru/migration56.new-features.php раздел Argument unpacking via ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 15:41 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
я наверное не в тему, а call_user_func_array? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 16:05 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
то что нужно ТС, это func_get_args() - получить масив входных параметров для функции. а то что дали ссылку на пхп 5.6 это добавка в синтаксис, что мы можем несколько задать чётко, а остальные ввиде масива. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 19:48 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 , сабжевую задачу реализовать сможете ? Приведите рабочий пример из 1-го поста. Напомню, что число параметров, принимаемых функцией базового класса, неизвестно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 12:14 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 alex564657498765453 , сабжевую задачу реализовать сможете ? Приведите рабочий пример из 1-го поста. Напомню, что число параметров, принимаемых функцией базового класса, неизвестно. внимательно прочитай и запусти код. А получает больше чем обьявили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 00:20 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
но вообще это какаято ересь, функция принимает разное число параметров. у финцкии фиксированное число параметров, другое дело что параметр, может быть множеством! func add_user_data_to_db($user_id,$very_important_value,$other_info) { $thosr_info - множество значений, переменное. } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 00:22 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
-k2- ответил. Этож стандартный случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 01:09 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
alex564657498765453то что нужно ТС, это func_get_args() - получить масив входных параметров для функции Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Ага. Ошибка несоответствия деклараций: авторE_STRICT information: Declaration of B::func() should be compatible with that of A::func()В любом случае, Ваш пример всего лишь демонстрирует возможности применения функции func_get_args , но не решает сабжевую задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 15:17 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
авторвнимательно прочитай и запусти код. А получает больше чем обьявили. Какая разница - больше получает или нет. Нам необходимо все полученные параметры (число которых внутри класса cls2 неизвестно) передать функции базового класса. Ваш пример НЕ ПЕРЕДАЁТ все полученные параметры функции базового класса. О чём речь ? авторно вообще это какаято ересь, функция принимает разное число параметров. у фунцкии фиксированное число параметров, другое дело что параметр, может быть множеством! Функции с переменным числом параметров - обычное явление в php. И это не ересь. А множеств в php нет. Есть массивы . Что касается сабжевой задачи, то в объявлении функции cls1::func , конечно же, имеет место определённое число параметров (при этом php позволяет передавать и иное число параметров). Но внутри класса cls2 , повторюсь, число параметров метода cls1::func() , неизвестно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 15:18 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
-k2-я наверное не в тему, а call_user_func_array?Более чем в тему. Вот такой вариант уже ближе к решению: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но одновременно с этим, получаем предупреждение: авторDeclaration of B::func() should be compatible with that of A::func() Тогда как можно корректно перегрузить метод, не зная числа параметров перегружаемого метода базового класса ? Оператор ... до php 5.6 не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:22 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
В качестве костыля можно предложить такой вариант: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. При этом никаких предупреждений не получим. Но этот вариант не работает в тех случаях, когда перегружаемый метод базового класса имеет свои значения по умолчанию (эти значения будут "перезаписаны" значениями по умолчанию метода производного класса). Но даже если перегружаемый метод базового класса не будет иметь значений по умолчанию, тогда будут пропущены (замаскированы) ошибки передачи параметров, когда фактически передаётся меньше параметров, чем объявлено в методе базового класса. Т.е. этот вариант не катит в любом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:32 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, call_user_func_array(array(parent, func_name), func_get_args()); ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 11:03 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
-k2-, это я не дочитала до конца. просто глаз споткнулся што вызов не совсем такой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 11:06 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, Но этот вариант не работает в тех случаях, когда перегружаемый метод базового класса имеет свои значения по умолчанию (эти значения будут "перезаписаны" значениями по умолчанию метода производного класса). Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. нет, не перезаписаны, func_get_args не возвращает значения по умолчанию Но даже если перегружаемый метод базового класса не будет иметь значений по умолчанию, тогда будут пропущены (замаскированы) ошибки передачи параметров, когда фактически передаётся меньше параметров, чем объявлено в методе базового класса. если вы используете динамическую передачу параметров, то конешно такие ошибки обрабатывать задача ваша, если в базовый класс вмешиваться нельзя, а нужно исследовать базовый класс из наследника, то тогда reflection Код: php 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 11:53 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
авторнет, не перезаписаны, func_get_args не возвращает значения по умолчанию Да, действительно, проверил. Умолчания не включает. Но в любом случае, вариант с большим числом параметров - это костыль, нежели решение. А использование reflection - вариант. Только нужно будет объявить его как static (набор параметров), чтобы набор параметров нужно было получать только один раз (reflection затратен по времени). Всё равно надеялся на более простое и более красивое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:14 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, немножко задача непонятная, вы расширяете класс, о котором ничего неизвестно, кроме имени и метода? может есть какая-то более первоначальная постановка задачи, тогда вам и посоветуют больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:19 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Cyrax_02авторвнимательно прочитай и запусти код. А получает больше чем обьявили. Какая разница - больше получает или нет. Нам необходимо все полученные параметры (число которых внутри класса cls2 неизвестно) передать функции базового класса. Ваш пример НЕ ПЕРЕДАЁТ все полученные параметры функции базового класса. О чём речь ? авторно вообще это какаято ересь, функция принимает разное число параметров. у фунцкии фиксированное число параметров, другое дело что параметр, может быть множеством! Функции с переменным числом параметров - обычное явление в php. И это не ересь. А множеств в php нет. Есть массивы . Что касается сабжевой задачи, то в объявлении функции cls1::func , конечно же, имеет место определённое число параметров (при этом php позволяет передавать и иное число параметров). Но внутри класса cls2 , повторюсь, число параметров метода cls1::func() , неизвестно. 1)яж тебе писал, твой случай как ответили - вызов функции с параметрами ввиде масива. а код я запостил, чтобы отразить тот факт ,что вне зависимости, сколько параметров в обьявлении, мы можеш получить все параметры - обьявленные будут именнованные, отсальные только в масиве func_get_args() 2)множество - тип данных, позволяющий хранить набор из заранее определёных величин. это определенение слова множество - как тип данных, оно сиюда ваще подходит? если мы говорим о хранение чего угодно?? множество - значит совокопность, больше чем один. а вообще, в пхп множество как понятие есть. :) это асоциативный массив, который включает в себя все свойства множества - нет два елемента с одинаковым ключом, можно пощитать сколько элементов, можно проверить на пустоту, можно сложить вычесть, извлечь елемент, добавить елемент. ...а вообще, если мы обсуждаем ошибку в коде, то мы говорим на языке програмирования. если обсуждаем общие идеи програмирования, то говорим на языке не привязаным к конкретике програмирования...предполагая что каждый уже сам сообразит, как в своём языке реализовать/имитировать/или эмулировать общее понятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 13:17 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
авторнемножко задача непонятная, вы расширяете класс, о котором ничего неизвестно, кроме имени и метода? Не совсем так. Расширяется класс некоторой сторонней программной системы . В каждый момент времени о расширяемом классе известно всё. Реализация перегрузки метода без привязки к конкретному набору параметров требуется постольку, поскольку эта самая сторонняя программная система постоянно обновляется и список параметров от версии к версии может меняться. Это универсальность, безопасность и независимость собственного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 13:21 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
автор1)яж тебе писал, твой случай как ответили - вызов функции с параметрами ввиде масива . а код я запостил, чтобы отразить тот факт ,что вне зависимости, сколько параметров в обьявлении, мы можеш получить все параметры - обьявленные будут именнованные, отсальные только в масиве func_get_args() Чтобы вызвать функцию с параметрами в виде массива (получаемыми через func_get_args), нужно, чтобы эта самая вызываемая функция принимала параметры в виде массива, а не в виде списка. В сабжевом случае функция принимает параметры в виде списка. автор2)множество - тип данных, позволяющий хранить набор из заранее определёных величин. это определенение слова множество - как тип данных, оно сиюда ваще подходит? если мы говорим о хранение чего угодно??... ...а вообще, если мы обсуждаем ошибку в коде, то мы говорим на языке програмирования. если обсуждаем общие идеи програмирования, то говорим на языке не привязаным к конкретике програмирования...Вы сами себя загнали в тупик: 1) В первом предложении вы характеризуете множество как общее понятие 2) Во втором предложении говорите, что при обсуждении конкретной реализации в конкретном языке программирования следует использовать терминологию этого языка программирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 13:32 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
А оператор ... в php 5.6 решает задачу ? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Этот вариант будет работать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 16:47 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Хто-нить проверит, нет ? Предупреждение "Declaration of B::func() should be compatible with that of A::func()" вылезает или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 13:43 |
|
||
|
[PHP] Передача неизвестного числа параметров из метода производного класса методу базового
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, у меня везде ниже 5.6 к сожалению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 14:14 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38827959&tid=1462180]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 422ms |

| 0 / 0 |
