понимание переменных и области видимости

#php

#php

Вопрос:

РЕДАКТИРОВАТЬ *** мой вопрос было немного сложно понять…позвольте мне попробовать еще раз.

У меня проблема с пониманием переменных и способа, которым они выполняют свое значение.

например.

если я скажу

 $var name= 'mike';
  

тогда, если я протестирую страницу, ничего не будет отображаться, потому что ничто в HTML не запрашивает значение mike .

если бы я сделал

 echo $name;
  

тогда страница просто покажет Майка…..

тем не менее, если я сейчас сделаю это:

 $connect2db = mysqli_connect('values here');
if(!$connect2db){
    die("error connecting to the database" . mysqli_error);}

$db_query = mysqli_query($connect2db, "INSERT INTO email_list(email, firstname, lastname)
                VALUES ('$email', '$fname', '$lname')");
  

для вставки этих значений из формы в БД
я не понимаю, как вызывается и запускается соединение и команды с БД, потому что для меня

$connect2db равно «этим командам», но его ничто не вызывает. все $connect2db, равное буквально, — это инструкция, которую нужно выполнить после ее запуска.

где в этом фрагменте кода вызывается / запускается соединение? где в этом блоке кода код вызывается к действию (например, echo выше вызывает $name для ввода в действие, чтобы отобразить его значение «???.

Я ничего не вижу в этой переменной connect2db, которая вызывает ее свойства действия / подключения для работы.

например, если бы я сказал

псевдо

 if(is true){
this.$db_query; 
}
  

я понимаю, это для меня означает, что ЕСЛИ что-то оценивается как true, сделайте то, что посередине..

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

Комментарии:

1. Не уверен, что я понимаю, о чем вы говорите, но в этом сценарии все должно быть линейным (сверху вниз).)

2. Ваши примеры кода идентичны, была ли какая-то разница, которую вы пытались выразить здесь?

3. я отредактировал свой вопрос. теперь должно быть понятнее.

4. Боже, я потратил 5 минут, исправляя строчные i буквы s, апострофы и так далее, А ты все это переписываешь? : D

5. Просто для записи, у вас не может быть пробела в вашей переменной: $var name= ‘mike’; У вас должно быть $name = ‘mike’;

Ответ №1:

В отношении

 $connect2db = mysqli_connect('values here');
  

вы упоминаете:

$connect2db равно «этим командам», но его ничто не вызывает. все $connect2db, равное буквально, — это инструкция, которую нужно выполнить после ее запуска.

Это не так. mysqli_connect это функция, и использование этого синтаксиса ( functionname(argument) ) фактически вызывает эту функцию. $connect2db Используется для хранения возвращаемого значения из этой функции.

Подводя итог тому, что происходит в этой строке:

  • выполняется вызов mysqli_connect существующей вызываемой функции. Это выполняет функцию.
  • возвращаемое значение из этой функции сохраняется в переменной с именем $connect2db

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

Чтобы узнать, что это за тип возврата, нужно посмотреть документацию API для этой функции, и в данном случае это объект (который представляет соединение с сервером).


Теперь возможно, чтобы переменная содержала функцию, подобную той, которую, как вы думали, имел в виду ваш пример. Синтаксис этой вызываемой анонимной функции будет выглядеть так:

 $greet = function($name)
{
    printf("Hello %srn", $name);
};
  

Вы можете видеть, что вместо формата:

имя функции скобки аргументы скобки точка с запятой

формат:

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

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

 $greet('World');
  

Обратите внимание, что этот формат доступен только в PHP 5.3, до того, как его нужно было использовать create_function .


Соответствующие ссылки:

Комментарии:

1. итак, вы говорите, что я неправильно понимаю контекст, для которого используется переменная? что в этом случае переменная не хранит фактическую команду, что ЭТО команда функции и что переменная в этом случае просто хранит возвращаемое значение указанной функции, которое в данном случае является true для connected или false, если нет??

2. @somdow: почти , но не совсем. В вашем примере команда функции представляет собой блок текста mysqli_connect('...') . Это выполняется первым. Возвращаемое значение из этой команды затем сохраняется в переменной с именем $connectdb . И возвращаемое значение не является логическим значением, это объект. Тест if (!$connectdb) проверит, является ли объект null . Этот объект, если он не равен null, может быть использован для других вызовов функций позже, например mysqli_query .

3. хорошо, я думаю, что я наполовину понимаю, но … хорошо, позвольте мне сформулировать это так: если у меня есть ключ от машины в замке зажигания (переменная и ее значение), машина не заведется, пока не будет инициировано зажигание (эхо). в случае этой «ресурсной» переменной / или переменной, содержащей ресурс, который является функцией подключения к БД, что заставляет его включать включение? просто потому, что ключ находится в замке зажигания (переменная, объявленная с помощью функции), я все еще не вижу поворота ключа для запуска автомобиля. даже с $db_query = mysqli_query($connect2db, «ВСТАВИТЬ В tbl (values) ЗНАЧЕНИЯ (‘дополнительные значения’)»);

4. — $db_query по-прежнему просто перечисляет свое значение В КАЧЕСТВЕ команды … или это вроде как сказать VARIABLE == command ? следовательно, почему, когда вы определяете var таким образом, он работает ВО время объявления? или я все еще в замешательстве?

5. @somdow: чтобы точно знать, как / когда функция выполняет запрос, вам нужно посмотреть на код внутри функции. Но это не обязательно, вы можете доверять документации API функции, что она будет делать то, что, по ее словам, она делает. Внутри функции будет несколько операторов, и один из них будет запрашивать базу данных и создавать результирующий объект и в конечном итоге возвращать его.

Ответ №2:

$connect2db содержит ресурс, который описывает активное соединение. mysqli_query() ожидает ресурс в качестве первого параметра, потому что ему нужно знать, какое соединение он должен использовать, чтобы делать то, что он делает. «Действие» начинается в основном потому, что вы вызвали функцию и сообщили ей, какие значения использовать для ее работы.

Комментарии:

1. я отредактировал свой вопрос. теперь должно быть понятнее. о, и спасибо, что попробовали первый, lol. в моем мозгу беспорядок.

2. но я вызвал функцию через переменную … если переменная говорит «im равно соединению», значит ли это, что переменная sorta становится самим соединением?

3. Не совсем. Вы можете представить это как шкаф, полный ящиков, где каждый ящик содержит открытое соединение и имеет уникальный идентификатор. Как только вы вызываете mysqli_connect() , вам присваивается номер одного из ящиков. И если вы используете что-то подобное mysqli_query() , вам нужно указать, какой ящик использовать, указав ему возвращаемое значение, полученное при подключении. Это помогает?

Ответ №3:

Я думаю, что его действительно услышат, чтобы понять ваш вопрос 🙂 Поэтому я стараюсь изо всех сил 🙂

Если вы хотите напечатать ‘Mike’ через $name, вам нужно зарегистрировать переменную

 <?php

    $name = 'Mike';
    echo $name;

?>
  

Это работает даже в классах

 <?php 

    class Names {

        /* Set the default to Mike */
        var $name = 'Mike';

        /* Get the Name */
        public function getName() {
            echo $this->name;
        }

        /* Override the Name */
        public function setName($name = NULL) {
            if($name != NULL) {
                $this->name = $name;
            }
        }

    }

?>
  

Для построения соединений с базами данных я предлагаю прочитать http://php.net/manual/en/mysqli .query.php есть несколько действительно полезных скриптов

Приветствует