За последние 24 часа нас посетили 17783 программиста и 1718 роботов. Сейчас ищут 906 программистов ...

Микровопросик

Тема в разделе "PHP для новичков", создана пользователем mirosas, 12 авг 2015.

  1. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    На чем вы писали раньше?
    Если вы для каждой логической сущности заводите класс с двумя свойствами, и пишите методы по три строки, то знайте, что PHP - это не тот язык, в котором так делают.
    Я уверен, что 95% пхпшников вообще не поймут, в чем вы увидели проблему. Это ведь вопрос образа мысли. Только из любопытства выполнил поиск по одному движку интернет-магазина с элементами социальной сети. В нём нашелся 771 вызов new и ни одного clone.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Передача объектов по ссылке, а не по значению делается, в первую очередь, для того чтоб был возможен полиморфизм - т.е. с объектами производных классов можно было обращаться как с объектами базовых классов. Или чтоб в функцию, ожидающую объект базового класса можно было передать объект производного. В том же C++, где возможна передача объектов по значению, и где есть автоматические конструкторы копирования и т.п., тем не менее оперируют обычно с указателем на объект, а не с объектом, именно по этой причине
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    ВамFell-x27 уже объяснял . Это принципы ООП. PHP хоть и не зарождался как язык ООП но тихонько двигался к этому.
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Попробуйте создать через new, посмотрите, что будет. А еще в JS у 99% встроенных объектов есть метод toValue(), который, в случае чего, при попытке получить от объекта значение, отдает именно его, а не ссылку на себя. "Примитивы" работают именно так с вероятностью 99999%, просто не проверял - никогда не вставало тут проблем.
    Я тебе больше скажу, не 95%пхпшников, а 95% программистов вообще.
    И тут больше скажу - за все время практики программирования ни разу не было ситуации, когда вот лично мне был бы нужен clone. Ни в одном языке, с которым приходилось работать. Никогда. Хотя писал далеко не хелловорлды.

    Автор, просто ты что-то делаешь не так.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    В Yii2 clone используются. Почему бы нет, это же не запрещённая команда. Например, с ActiveRecord иногда удобно. Но где автор увидел проблему - я тоже не знаю. Просто помнить, что без clone всё будет по ссылке, и порядок.
     
  6. mirosas

    mirosas Активный пользователь

    С нами с:
    17 июл 2015
    Сообщения:
    236
    Симпатии:
    5
    Проблема в том, чтобы потенциально хапнуть ошибку. Пока не хватал.

    Я привык что можно в функцию передать параметры, внутри функции делать с ними что угодно, и это не будет иметь side-effect-ов. А оказывается не всегда так.

    Я например текстовые параметры переданные в функцию люблю поизменять как-то так: $text=str_replace('hi ', 'bye', $text); И если бы тексты передавались по ссылке, то это вело бы к побочным эффектам вне функции.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    1) Мы прекрасно понимаем, что вы пытаетесь донести.
    2) Такой механизм не оспаривается, это факт.
    3) Все, вытекающее из 2 пункта - сугубо ваши проблемы.

    Можете еще несколько раз написать, что вам это не нравится. Не изменится ничего. Се ля ви.