Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Урок № 1 - Самые основы.
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Переменные в php.
Переменные выполняют работу - хранение данных в оперативной памяти, а за хорошую
работу надо платить. Именно поэтому переменная представлена в виде знака доллара и
названия переменной. К примеру: $variable .
Сама по себе переменная существовать не может. Ей нужны её данные так-же, как нам
холодильник. При помощи присваивания мы кладём в переменную данные.
Присваивание выглядит следующим образом: $var = что-то;
Правильное имя переменной должно начинаться с буквы или символа подчеркивания с
последующими в любом количестве буквами, цифрами или символами подчеркивания
<?PHP $var = 1; // Правильно $VAr = 1; // Правильно $_var3 = 1; // Правильно $3var = 1; // Не правильно. Начинается с числа. $_____ = 1; // Правильно $@-!%(_*) = 1; // Неправильно. Только буквы, цифры и знак подчёркивания
Так же как и наш холодильник, переменная хранит еду.
Еда бывает разных типов - напитки, гарниры, салаты, печеное, молочные продукты и т.д.
Данные тоже бывают разных типов.. целые числа, дробные числа, наборы букв, наборы других данных и еще несколько.
Целое число ( Integer ) -
Как вам известно, числа бывают положительные, отрицательные и в разных системах исчисления. Чаще всего подразумевается что целое это число из множества Z = {..., -2, -1, 0, 1, 2, ...}.
Предел совершенства наших компьютеров позволяет использовать в качестве целого числа числа из диапазона Signed: −2,147,483,648 to +2,147,483,647.
$a=0123;// восьмеричное число (эквивалентно 83 в десятичной системе)
$a=0x1A;// шестнадцатеричное число (эквивалентно 26 в десятичной системе)
?>
Возможно тебе будет любопытно что произойдёт если указать число вне диапазона..
Я тебе напомню попробовать в конце урока =)
Дробные числа ( Float )
Числа с плавающей точкой (они же числа двойной точности или действительные числа)
отличная кандидатура на хранение к примеру результата деления 7 на 3.
$c=7E-10;// Из курса математики напомню что буквой e обозначают экспоненту.
?>
Как правило диапазон возможностей здесь немного шире как правило, ~1.8e308 с точностью около 14 десятичных цифр (64-битная система)
Довольно часто простые десятичные дроби вроде 0.1 или 0.7 не могут быть преобразованы в свои внутренние двоичные аналоги без небольшой потери точности. Это может привести к неожиданным результатам.
Это связано с невозможностью точно выразить некоторые дроби в десятичной системе счисления конечным числом цифр. Например, 1/3 в десятичной форме принимает вид 0.3333333. . ..
Строки ( String )
Строка - это набор символов. В PHP символ это то же самое, что и байт, это значит, что возможно ровно 256 различных символов.
Замечание: Нет никаких проблем, если строка очень велика. Практически не существует ограничений на размер строк, налагаемых PHP, так что нет абсолютно никаких причин беспокоиться об их длине.
Строки в php можно определить тремя способами: одинарными кавычками, двойными кавычками и heredoc синтаксисом.
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Строка в двойных кавычках
Так же как и в одинарных, текст взятый в двойные кавычки это строка.
$var = "val";
Если строка определяется в двойных кавычках, либо при помощи heredoc, переменные внутри нее обрабатываются.
Если интерпретатор встречает знак доллара ($), он захватывает так много символов, сколько возможно, чтобы сформировать правильное имя переменной. Если вы хотите точно определить конец имени, заключайте имя переменной в фигурные скобки.
echo"$beer's taste is great";// работает, "'" это неверный символ для имени переменной
echo"He drank some $beers";// не работает, 's' это верный символ для имени переменной
echo"He drank some ${beer}s";// работает
echo"He drank some {$beer}s";// работает
?>
Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc.
Напомню что если в строке определенной кавычками встречается кавычка, нужно
сообщить php что это часть строки - экранировать кавычку. Как в примере $var='I\'m';
В данном примере строка "Меня зовут ... ... букву А" образовывается при помощи синтаксиса HereDoc. Обратите внимание что вместо кавычек в начале и конце строки стоит название строки - HEREDOC1. <<<HEREDOC1 означает начало строки под названием HEREDOC1, а HEREDOC1; её конец.
Массив ( Array )
Массив в php это холодильник хранящий набор продуктов.
В данном примере в нашем холодильнике array находятся два продукта относящиеся к категории Строк (и потому заключены в кавычки).
Необычным тебе может показаться что счёт продуктов в программировании начинается с нуля. Именно поэтому в нашем массиве нулевой элемент будет 'Сыр', а первый элемент 'Колбаса'.
$array=Array('Сыр','Колбаса');// Определяем массив с двумя строками
echo$array[0];// Обращение к нулевому элементу. Выведет Сыр.
$array[1]='Мороженое';// Присвоение первому элементу. заменяем колбасу на молоко
echo$array[1];// Выведет Мороженое.
Ассоциативные массивы
С таким же успехом как и в предыдущем примере, элементами массива могут быть не только строки, но и другие переменные. $array = Array($var1 , $var2);
У любой переменной есть название и есть значение, а это значит что в массив мы можем также записать пары данных в виде название-значение. Массив такого рода называется
ассоциативным благодаря ассоциации названия и значения, а название в таком массиве называется ключом.$arr = Array('key'=>'val' , 'key2'=>'val2');
Таким образом в массиве нет нулевого и первого элемента, но есть элемент key и элемент key2.
$arr=Array('key'=>'val','key2'=>'val2');// Определяем массив с двумя строками
echo$arr['key'];// Обращение к элементу с ключом key. Выведет val
echo$arr[0];// Обращение к нулевому элементу. Ошибка. Нет такого элемента
$arr['key2']='Мороженое';// Присвоение элементу с ключом key2 нового значения.
echo$arr['key2'];// Выведет Мороженое.
Многомерные массивы
Массив может содержать любой тип данных в том числе и другой массив.
Массив массивов называется многомерным массивом.
Всего есть два типа массивов - числовые и ассоциативные.
Первый вид представляет из себя массив с ключами в виде чисел как в самом первом примере. Всё остальное является ассоциативным массивом.
Создание массива и его наполнение
Содержание массива может быть задано как это было в примерах - заранее.
$arr = Array(1,2,3); // ключи 0,1 и 2
Так же как мы присваивали ранее элементу в массиве другое значение
можно создать и новый элемент
$arr[3] = 5; // Создаётся элемент с индексом 3 и ему тут же присваивается число (integer) 5.
Попробуй предположить что произойдёт при создании элемента $arr[] = 6;.
В этом случае, создастся элемент в массиве, ему присвоится значение 6, а индекс с которым элемент запишется в массив будет максимальный целочисленные уже существующий индекс + 1.
Таким образом после $arr[3] = 5; максимальный целочисленный индекс стал 3.
При $arr[] = 6; максимальный индекс + 1 будет 4. Таким образом $arr[4] становится 6.
$arr[]='Банан';// Попробуйте сказать какой индекс будет у элемента Банан теперь?
/* ОТВЕТ:
в первом случае максимальный целочисленный индекс 0. 0+1 =1
значит индекс банана будет 1.
Во втором случае максимального целочисленного индекса нет вообще
поэтому новый целочисленный индекс будет 0 .
*/
Объекты ( Object )
Оглянитесь вокруг. Всё вокруг нас это объекты. Стул, бутылка, веревка, мыло, это всё объекты. У объектов есть свойства и функции.
Объект - Машины. Свойство - Цвет. Значение - белый.
Объект - Машины. Функция - бибикать. Действие - издаёт звук.
// Определяем что такое машины, что она умеет делать и как.
class car
{
var$color='White';
function tut_tut(){echo"BIp BIp";}
}
$honda=new car;// присваиваем переменной honda объект - Машину
echo$honda->color;// Выводим свойство машины - цвет
Работу с классами и объектами поподробнее мы рассмотрим позже.
----- Truly yours, Sasha.
valenok
Отправлено: 16 Января, 2009 - 20:09:28
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Ресурс ( Resource )
Ресурс представляет из себя указатель, ссылку, на внешний ресурс.
Представим автосервис с большим количеством машин, которым заливают несколько по литров масла в двигатель. Со свистом тормозов из подворотни вылетает феррари и паркуется на очередной сервисной парковке. Хозяин сервиса уже кричит рабочему, залить 5 литров масла и тычет большим пальцем в красную феррари.
Наш рабочий получает в данном случае два типа данных - число (литров масла) и указатель на машину, то-есть определение - какому именно объекту из всех вокруг нужно подлить чего-нибудь.
Подмечу, что рабочий получает от босса вовсе не саму машину, а лишь дескриптор (указатель) машины с которой предстоит работать. В php этим дескриптором является тип данных resource.
Null
Чтобы понять что такое Null нужно понять как хранит php переменные в памяти. Компьютерная память состоит из большого количества маленьких ячеек. В эти ячейки и записываются твои данные. Обращение к той или иной ячейке происходит при помощи идентификатора ячейки в памяти, её места.
На деле интерпретатор хранит связь между названием переменной и идентификатором ячейки в памяти. Мы же в свою очередь работаем с названием, вместо того чтобы самим запоминать идентификаторы ячеек, которые и без того, известны одному интерпретатору.
Когда мы присваиваем переменной значение в первый раз, интерпретатор выбирает ячейку в памяти, заносит туда наше значение и привязывает название переменной к определенному идентификатору.
Когда к названию переменной соответствует ячейка в памяти, переменная считается определенной. Пустая переменная означает что содержимое ячейки является числом ноль, строкой нулевой длины или вовсе отсутствует.
Значение Null сбрасывает привязку названия переменной к ячейке в памяти и переменной больше не соответствует никакая ячейка. Переменная просто никуда не указывает и ни к чему не ведет. В этом случае переменная считается неопределенной,
так как название есть а привязка к ячейке отсутствует.
Присвоение переменной значения null можно делать так: $a = Null;
Заметьте что слово null не взято в кавычки, потому что это не строка с текстом.
Булев тип ( Boolean )
Тип данных который включает в себя всего два значения
Правда и неправда. True и False. Используется в основном в условиях.
к примеру выражение ($a > $b) может быть правдой или не правдой.
Что это за странные типы данных которые я вижу в документации ? mixed - обозначает что функция возвращает разные типы данных, в зависимости от обстоятельств number - означает что возвращаемый результат представляет из себя integer или float callback - в php функция вызывается как её название и скобочки. К примеру print().
Некоторые функции в php (к примеру call_user_func() ) принимают в качестве параметров названия функций с которыми они будут работать. в таком случае параметр формата callback которые они требуют представляют из себя строку с названием функции без скобочек. К примеру call_user_func('increment', $a);
Возможно данный аспект будет подробнее рассмотрен в разделе работы с функциями.
Вопросы и задания на усвоение материала:
1. $a = '22'; Какого типа является сейчас переменная $a ?
2. $b = $a = 7; чему равно $b ? не забудьте что читается в лева на право.
3. $a = '46'; $b = '32'; Что больше, а или б ?
4. Какой тип переменной лучше всего подойдёт для хранения результата деления 2 на 4?
5. $a = 5; $b=2.5; Какого типа данных будет результат деления А на Б ?
6. Попробуйте присвоить переменной значение +214748364900000000000000.
7. Выясните сколько это 2B в шестнадцатеричной системе ? ( Присвойте переменной значение и выведите )
7. Можно ли переменной присвоить переменную ? Если да - покажите как. Если нет, объясните почему нет.
9. $a='Вася'; $b = 'Петя'; Поменяйте местами значения переменных .
10. Создайте одномерный числовой массив с одним элементом.
Добавьте туда еще один элемент.
Добавьте туда третий элемент представляющий из себя ассоциативный массив с одним элементом.
Добавьте в этот ассоц. массив еще один элемент.
Замените первый элемент в родительском массиве на второй элемент из ассоц. массива.
Как мы уже выяснили, переменные бывают разных типов и иногда нам нужно
узнать какого типа переменная, поменять её тип чтоб сравнить с переменной другого типа
или сделать с ней что нибудь полезное.
Тип переменной по умолчанию выбирается автоматически при присваивании.
Так же автоматически приводятся типы переменных при операциях с ними, если это необходимо. Так же как мы ранее заметили, при делении 5 на 2,5 результатам будет
дробь, так как интерпретатор приводит обе переменных к одному типу и потом производит деление.
Узнать какой тип у переменной можно при помощи функции gettype();
Функция это кучка действий. Она принимает аргументы, делает с ними некие операции и возвращает результат. К примеру Приготовить пиццу это функция принимающая параметры - тесто, яйца, сыр, кетчуп, анчоусы, плиту, и возвращает Пиццу.
Возвращаемое значение у функций может быть любого типа данных.
У функции getttype() возвращаемый результат это строка содержащие название типа.
Если вы попробуете код echo gettype(512); то получите в ответ строку "Integer".
Можно узнать является ли тем или иным типом данных переменная при помощи
is_float() is_int() is_string() is_object() is_array() .
Эти функции принимают один аргумент и возвращают булев тип (true или false) .
Изменить тип переменной можно несколькими функциями:
intval() - возвращает аргумент в виде целого числа integer
floatval() - возвращает аргумент в виде дробного числа float
strval() - возвращает аргумент в виде строки string
settype() - превращает первый аргумент в указанный во втором аргументе тип
settype($a,'integer') Превратит $a в целое число.
Заметьте что эта функция не возвращает нового значения, а изменяет переданный ей параметр.
$a and $b Логическое 'и' TRUE если и $a, и $b TRUE.
$a or $b Логическое 'или' TRUE если или $a, или $b TRUE или оба сразу.
$a xor $b Исключающее 'или' TRUE если $a, или $b TRUE, но не оба.
! $a Отрицание TRUE если $a не TRUE.
$a && $b Логическое 'и' TRUE если и $a, и $b TRUE.
$a || $b Логическое 'или' TRUE если или $a, или $b TRUE или оба сразу.
Строковые операторы
В PHP есть два оператора для работы со строками. Первый - оператор конкатенации ('.'), который возвращает объединение левого и правого аргумента в одну строку. Второй - оператор присвоения вместе с конкатенацией.
$b=$a."World!";// $b содержит строку "Hello World!"
$a="Hello ";
$a.="World!";// $a содержит строку "Hello World!"
?>
Побитовые операторы
Побитовые операторы позволяют устанавливать конкретные биты в 0 или 1 для целочисленных значений. В случае если и левый, и правый операнды строки, побитовые операции будут работать с их ASCII-представлениями.
$a & $b Побитовое 'и' Устанавливаются только те биты, которые установлены и в $a, и в $b.
Пример: $a= 12; $b=5. Посмотрим, что произойдет в результате побитового и.
1100 - а
0101 - b
0100 - результат. В десятичной системе счисления это 4.
$a | $b Побитовое 'или' Устанавливаются те биты, которые установлены либо в $a, либо в $b.
Пример: $a и $b те же.
1100 - а
0101 - b
1101 - результат
$a ^ $b Исключающее или Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b
Пример: $a и $b те же.
1100 - а
0101 - b
1001 - результат
~ $a Отрицание Устанавливаются те биты, которые в $a не установлены, и наоборот.
Пример: $a = 5
0101 - а
1010 - не а.
$a << $b Сдвиг влево Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает 'умножение на 2')
Пример: $a = 5. Сдвинем на 2 позиции влево.
В двоичной с/с пятерка выглядит 101. Сдвигаем. Пустое место справа заполняется нулями. Получается 10100. По-русски это 20.
$a >> $b Сдвиг вправо Все биты переменной $a сдвигаються на $b позиций вправо (каждая позиция подразумевает 'целочисленное деление на 2') Аналогично предыдущему. Цифры, уходящие справа теряются.
Немного комментариев по этому поводу. Побитовые опреации работают с двоичным представлением числа. Если один из двоичных операндов короче другого, короткий дополняется нулями слева.
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Про строки надо бы исправить: сначала идет повествование о строках в одинарных кавычках и показываются примеры, в которых PHP не подставляет значения переменных и не интерпретирует управляющие символы.
Сначала всё-таки лучше рассказать про двойные кавычки, чтобы читатель всё-таки знал, что интерпретация в строках в php вообще сущесвует, а то он читает и наверняка думает: "ну не подставилось, и что? А должно что ли?".
Либо начать с фразы, что в двойных кавычках все вещи подставляются, а в одинарных - нет.
Про heredoc надо написать, что HEREDOC1, который закрывает строку должен быть в самом начале строки, а то все ставят табуляцию перед ним или еще что-то и возмущаются, что уроки тут не правильно написаны. И возмущаются мне в аську почему-то)
valenok
Отправлено: 01 Декабря, 2009 - 11:00:55
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Несомненно. Исправлю позже.
----- Truly yours, Sasha.
Champion
Отправлено: 01 Декабря, 2009 - 15:39:21
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
valenok пишет:
11. Создайте переменную типа Resource
я бы не смог, это сделать, прочитав такое описание, которое приведено здесь)
"Создать переменную типа Resource просто так не получится" - или это ответ?))
Ch_chov
Отправлено: 08 Января, 2010 - 13:06:11
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008 Откуда: из города
Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2010
Помог: 0 раз(а)
Подскажите для чего ставить в php коде: \n ??? чето не уловлю смысла! Он не переводит на новую строку, зачем его тогда ставить?
alexspb
Отправлено: 16 Июня, 2010 - 10:33:29
Посетитель
Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010
Помог: 0 раз(а)
EvgenyRus, если смотреть в браузере - то нет, а если получаемый код HTML, то должен быть перевод строки
опять же, при условии, что \n в двойныз кавычках "бла-бла \n бла-бла"
----- Хостинг - неограниченно доменов на одну папку Ajax - отличное введение
EvgenyRus
Отправлено: 16 Июня, 2010 - 11:14:23
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2010
Помог: 0 раз(а)
alexspb Что значит получаемый код HTML? Где можно посмотреть этот "бла-бла \n бла-бла" что бы 1-е бла-бла было на одной строке а 2-е бла-бла на другой!!!????
Druid
Отправлено: 05 Октября, 2010 - 20:52:04
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2010
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.