
Sparrow
10.11.2017
07:31:39
$result = $connect_db->query('SELECT properties_key, properties_properties_name FROM country');
function countryCode() {
foreach ($result as $row) {
echo $row['properties_properties_name'] . "<br>";
}
}
countryCode();
ребята ругается на foreach ($result as $row) {
как сделать для неё область видимости?( ничо не понял

Andrei
10.11.2017
07:33:40
function countryCode(&$result) {....
}
countryCode($result);

Sparrow
10.11.2017
07:38:01
а можно чтобы countryCode() был пуст
а как то назначить $result глобальным

Alexey
10.11.2017
07:38:38
так делать нельзя

Google

Alexey
10.11.2017
07:39:22

Andrey
10.11.2017
07:39:41
https://m.habrahabr.ru/post/147620/

Andrei
10.11.2017
07:40:13

Alexey
10.11.2017
07:41:53

Andrei
10.11.2017
07:44:25
а зачем иметь в худшем случае две копии одних и тех же данных? тем более это выборка без ограничений.
и надеятся на то что хватит memory_limit

Alexey
10.11.2017
07:48:25
затем, что передача по ссылке несет за собой больше побочных эффектов, чем это ожидается в коде
https://ru.hexlet.io/blog/posts/mp

Andrei
10.11.2017
07:52:12
обязательно посомтрю, но смущает момент, что передача по ссылке один их главных компонентов хайлоад, начиная с с++11 да же специальный термин вввели rvalue.
что подводит к мысли, что надо учиться пользоваться и понимать, когда и зачем надо использовать передачу по ссылке, а не надеятся на зависимость от версии и gc

Alexey
10.11.2017
07:55:48
ну мы ведь не про C++11, а про PHP :) В принципе, существует негласное правило, что, если нужно передать по ссылке - передавай объект. Иначе только копии.

Леонид
10.11.2017
07:57:18
Объекты надо использовать в основном.

Google

Andrei
10.11.2017
08:04:19
языкозависимое утверждение :) php бхект передаст по ссылке, в foreach, создаст копию автоматом при изменении значения

Sparrow
10.11.2017
08:06:01
$result = $connect_db->query('SELECT properties_key, properties_properties_name FROM country');
function countryCode($result) {
foreach ($result as $row) {
echo "<option value=" .$row['properties_key']. ">" . $row['properties_properties_name'] . "</option>";
}
}
ребята у меня щас в базе country хранится 3тыс.обьектов
при загрузке скрипт грузиться очень долго))
как решаются проблемы в таких случаях?
всё грузит сразу
либо такое не делается в selectах а поиск с выпадающим списком делатЬ?

Dmitry
10.11.2017
08:11:41
хайлоад головного мозга, хех

Andrey
10.11.2017
08:12:19
Стран же всего 251 судя по вики

Sparrow
10.11.2017
08:12:34
города
)

Andrei
10.11.2017
08:15:02
хайлоад головного мозга, хех
не в хайлоаде дела, а в организации своего кода и понимании как работает, зачем и что использовать. можно ведь написать линейный код в котором натаскать из базы милиооны строк, а потом пердавать их копии

Sparrow
10.11.2017
08:18:07
у меня щас при загрузке индекса сразу подгружает все города мира)
в select

Andrei
10.11.2017
08:19:43
зачем, сделайте как два поля в форме,
1 - страна
2 - город
ajax - ом при выборе страны, подгрузите в select города

Sparrow
10.11.2017
08:20:29
я сейчас оставил только выбор городов мне нужны только города
но они грузятся сразу все
при загрузке

Dmitry
10.11.2017
08:21:10
cow в пхп давно есть

Andrei
10.11.2017
08:22:03

Google

Sparrow
10.11.2017
08:22:17
cow?
мой пример думаю нада решать поиском)
т.к при выборе селект и вообще при загрузке сайта подгружаются все города мира

Dmitry
10.11.2017
08:24:48
copy on write, т.е. реально копия массива, передаваемого как аргумент функции, будет сделана не в момент передачи, а при первом измененеии массива

Sparrow
10.11.2017
08:24:49
и виснет всё

Andrei
10.11.2017
08:25:45

Alexey
10.11.2017
08:32:18

Andrei
10.11.2017
08:35:44
можно примерчик?
[php]
class Foo {
...
}
function a(Foo $obj) {...} - будет передана ссылка
[c++]
class Foo { ... }
void a(Foo obj) { ... } будет вызван копирующий конструктор, который создаст объект и скопирует свойства

Alexey
10.11.2017
08:37:58
а, это было в контексте плюсов, окей, спасибо

Dmitry
10.11.2017
08:39:45
и у рыб могут быть блохи ;)

Andrei
10.11.2017
08:45:24

Dmitry
10.11.2017
08:51:51
$value = array('sdfsf');
function foo($newvalue) {
debug_zval_dump($newvalue);
}
foo($value);
4.3.0 версия
array(1) refcount(4){
[0]=>
string(5) "sdfsf" refcount(1)
}
https://3v4l.org/ABFSq

Pavel
10.11.2017
08:54:46
Я так понял в разговорах что есть несколько подтекстов при обсуждении cow

Dmitry
10.11.2017
08:55:33
ну про массив как параметр речь шла вроде

Pavel
10.11.2017
08:55:35
На самом деле значение может не скопироваться даже если мы явно его скопировали. Так что есть внешний cow и "внутренний"
Я как то экспериментировал с большими массивами и увидел что даже при явном копировании занимаемая память не удваивается
То есть на низком уровне пхп упорно продолжает экономить байты
Так что тут нужно много уточнений

Google

Andrei
10.11.2017
08:59:24
да ребят, ну ведь дело не в движке php, а в понимании когда и зачем передавать по ссылке воспринимайте это как стиль\соглашение

Dmitry
10.11.2017
09:00:07
а что такое явное копирование?

Pavel
10.11.2017
09:26:25
$b = clone $a
Ну для массивов это просто $a1 = $a2; $a1[42] = 146;
В этом случае в $a1 все равно могут оставаться куски ссылок на $a2

Dmitry
10.11.2017
09:31:40
ну присваивание cow, да ;)

Admin
ERROR: S client not available

Andrei
10.11.2017
09:40:35

Dmitry
10.11.2017
09:41:23
спасибо КО

Andrei
10.11.2017
09:42:34
спасибо КО
всегда пожалуйста, но думаю основной посыл вы не много не поняли

Dmitry
10.11.2017
09:44:30
основной посыл, что в пхп5 стали объекты всегда по ссылке передавать? ;)

Andrei
10.11.2017
09:46:20
эммм, ну похоже вы вообще не поняли :)

Vitaliy Nameless
10.11.2017
09:48:09
наркомания какая-то

Dmitry
10.11.2017
09:49:09

Andrei
10.11.2017
09:50:31
странный посыл, если уж такими терминами оперировать, то учитесть читать :)

Dmitry
10.11.2017
09:52:38
читать я умею, спасибо. А вот понимать мысли людей, которые их не умеют высказать словами - нет, увы ;) но это не моя проблема ;)

Andrei
10.11.2017
09:56:08
не самое важное уметь читать, вожно понимать прочитанное, вас ни кто не заставляет понимать мысли, достаточно вдуматься в смысл написанного, ну ил пройти мимо, ну а так да

Dmitry
10.11.2017
09:57:28
панельные дома, в отличии от массивов, копируются физически сразу, а вот язык матерный работает только по ссылкам
думаю, вы поняли смысл, который я заложил в эту фразу еще в 18 веке

Andrei
10.11.2017
09:59:14
может хватить словобдлудить? что вы пытаетесь доказать? странный вы.

Google

Dmitry
10.11.2017
09:59:43
хм... разве вы не поняли? ну учитесь читать...
а вообще напомнило https://youtu.be/-dNwFVk68PI
тут повменяемее ;) а вот понять не могу... а ковариантность не нарушает ли LSP?

Sparrow
10.11.2017
15:32:50
народ как подменить значение в $_POST
приходит к примеру Russia
но мне нада чтоб подставлялось из json его код rus

Alexey
10.11.2017
15:36:28
($_post[country] == 'Russia') ? 'rus' : ''

Sparrow
10.11.2017
15:37:58
он берёт из json данные
вот код: https://pastebin.com/X7BZiVw7
вот сайт в origin подставляется имя а не код(
вот json файл: http://travel/resources/city.json

Alexey
10.11.2017
15:38:14
Вообще пост это обычный массив и работать с ним можно как с массивом. Отличие только в том что он суперглобальный

Sparrow
10.11.2017
15:38:28
нада чтобы в origin подставлялся короткий код страны RUS NY ENG
так работает если в поиске принудительно написать свои короткие коды

Alexey
10.11.2017
15:42:10
Создать массив справочник со странами и в зависимости от того что в посте получать значение из справочника

Sparrow
10.11.2017
15:42:34
код можно примерный

Alexey
10.11.2017
15:44:50
[Russia => 'rus', America => 'en'],
Как то так.
Я про массив справочник

Sparrow
10.11.2017
15:45:36
но мне нада чтоб он брал из моего json)

Alexey
10.11.2017
15:45:46
А дальше выборка по ключу
Ну ты Джейсон распарсь