[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с функциями
Страницы: 1, 2, 3, 4
karm
Всем привет! Помогите плиз! написал функцию:


function a($a) {
$a = mysqli_real_escape_string($conn,$a);

return $a;
}


пишет:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given

тоесть внутри функции, не видит подлючение к базе $conn
Kusss
и не будет видеть, переменная же не суперглобальная
как вариант
function a($a) {
global $conn;
return mysqli_real_escape_string($conn,$a);
}
Игорь_Vasinsky
Цитата
global $conn;


бля, ну скока можно.

почему не так?

function a($conn,$a) {
return mysqli_real_escape_string($conn,$a);
}


???

вам походу надо столкнуться с проблемой глобальных переменных - чтобы понять это.

и не важно - что он пишет один и херню, он на этапе получения навыков

или вы ждёте ещё одну тему реабилитации ???

ТС - у тебя переменная в теле функции, она находится в теле функции - это локальная область видимости, все переменные вне функции для функции не известны.

используй аргументы - чтобы передать данные во внутрь функции - чтобы функция имела к ним доступ.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
twin
Цитата (Игорь_Vasinsky @ 22.02.2017 - 13:03)
почему не так?

А в чем разница?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Игорь_Vasinsky
twin

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

когда речь идёт об одной-2х 3х - 10 функциях - то можно накласть, но ты к этому привыкешь - что можно и накласть

рано или поздно возникнет ситуация - когда такой код будет затратно поддерживать.

я объясняю абстрактную ситуацию, на конкретном примере - может понадобиться другое подключения, но да - выход есть - заглобалим другую переменную.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
я едва стиснув зубы могу предположить ситуация - когда функции используются внутри тела функций, зубы я стисну - но я для этих функций все равно буду использовать нужное кол-во аргументов - но я не буду зависеть от переменной, которая может поменять своё значение

щас я на процедурке не пишу, но когда писал, я не говорю про свои первые годы - я не в жизнь не запихивал данные в глобальную область.

для ТС простой пример:

Ты сидишь дома и с другом играешь в карты
ты проиграл желание
желание простое - выйти на улицу и крикнуть - Миха - ОЛЕНЬ
ты спрашиваешь - какой Миха?
тебе друг говорит - тот, со двора.

ты выходишь и кричишь - Миха -ОЛЕНЯРАААААА!

через пару минут тебя пинают в лицо 6 Мих и 2 Михаил Степаныча.

не проще было пригласить Миху домой и сказать - Миха ты Оленяра ?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
twin
Цитата (Игорь_Vasinsky @ 22.02.2017 - 13:22)
да есть вероятность того что эта переменная может быть изменена
Да все знают про паническую боязнь глобальных переменных. Я не про то спросил. Чем такой код

function a($a) {
global $conn;
return mysqli_real_escape_string($conn,$a);
}

$a = a($text);

$conn = null;

$b = a($text);

отличается от
function a($conn, $a) {
return mysqli_real_escape_string($conn,$a);
}

$a = a($conn, $text);

$conn = null;

$b = a($conn, $text);
?

Разве от этого пропала вероятность переопределения? Может тлько чуток уменьшилась, не более.

По мне так первый код более очевиден и безопасен, если соблюдать ряд условий.
1. Это должна быть действительно глобальная переменная. Объект коннекта как раз можно отнести к ним.
2. Стоит как то обозначить. Допустим регистром.
function a($a) {
global $CONN;
return mysqli_real_escape_string($conn,$a);
}

Тогда можно понять, что переменная только для чтения.

Вообще существуют суперглобальные переменные (POST, GET и иже с ними. Их тоже можно случайно переопределить. Однако никому в голову этого не приходит.

Так что такой совет
Цитата (Игорь_Vasinsky @ 22.02.2017 - 13:03)
вам походу надо столкнуться с проблемой глобальных переменных - чтобы понять это.
не имеет смысла. Столкнуться можно и с другой проблемой.

И это. Не нужно тут про синглтоны, реестры и все тяжкие. Разговор про процедурку тут пока. :)


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.