Все в программировании структурировано, подчиняется логике, алгоритмизированно.
Написание программы требует в первую очередь не знания языка, а умения строить логические цепочки, связывать события между собой, т.е. строить алгоритмы.
Для построения алгоритмов рекомендуется использовать блок-схемы. Первое время студентам настоятельно рекомендуется строить блок-схемы даже для самых простых задач, далее - только для тех, которые кажутся им сложными.
Блок-схемой называется графическое представление алгоритма. В блок-схеме шаг или последовательность шагов алгоритма представляется в виде блока, а между блоками устанавливаются связи.
Начало и конец алгоритма изображаются скругленными прямоугольниками, обычные действия - прямоугольниками, условия - ромбами, ввод и вывод данных - параллелограммами. Для более подробного ознакомления с блок-схемами читайте википедию на эту тему, и см. правило 2.
Для примера построим блок-схему алгоритма написания программы. Рекомендуется использовать Google Drawings (для этого создаем почту gmail, заходим на google drive, new->more->google drawings document)
Переменной называется поименованная область в памяти, где хранятся данные. Переменная имеет тип и имя. Имена переменных в PHP всегда начинаются со знака доллара. Для того, чтобы создать переменную и записать в нее значение, используется оператор присвоения (=). У каждой переменной в php в текущий момент времени может быть только один тип.
Типом переменной называется тот вид данных, который на данный момент может хранить переменная. Все виды данных в языках программирования можно отнести к двум группам: скалярные (простые) типы данных и структурированные (составные) типы данных.
На этом уроке мы работаем только со скалярным типом данных integer (целые числа) и структурированным типом данных string(строка), представляющим собой последовательность символов. Подробнее структурированные типы данных будут рассмотрены на следующих уроках.
Далее представлены переменные различных скалярных (простых) типов:
$my_integer = 4; //целые числа
$my_float = 4.12; //дробные числа
$my_str = 'aaa'; //символы
$my_bool = true; //правда или ложь, булева алгебра
PHP - язык со слабой динамической типизацией.
Динамическая типизация означает, что одну и ту же переменную можно сначала инициализировать строкой, потом числом, потом булевым значением, и так далее. Языки со статической типизацией, как язык C, Java, подобного не позволяют.
Слабая типизация означает, что язык сам меняет тип переменной в зависимости от ее использования. К примеру, если прибавить к числу строку, в которой записано число, язык автоматически прибавит число, находящееся в строке. Слабая типизация является причиной многочисленных ошибок.
Над целыми и дробными числами доступны математические операции умножения (+), деления(/), вычитания(-), сложения(+), возведения в степень(**) и получение остатка от деления(%):
$int1 = 4;
$int2 = 8;
$result = $int1 + $int2; // $result = 12
$result = $int2 - $int1; // $result = 4
$result = $int1 * $int2; // $result = 32
$result = $int2 / $int1; // $result = 2
$result = $int2 ** $int1; // $result = 4096
$result = $int2 % $int1; // $result = 0
Для вывода данных используются функции
echo, print, print_r, var_dump
Мы познакомимся с этими функциями позже, пока нам достаточно знать следующее:
$int1 = 4;
$str1 = "8";
echo $int1; //выведет 4
echo 'text'; //выведет text
echo "text"; //выведет text
echo '$str1';//выведет $str1
echo "$str1";//выведет 8
В качестве первой программы мы напишем небольшой скрипт. Скрипт будет получать на вход суммы денег, суммировать их и прекратит свою работу, когда сумма превысит тысячу (к примеру, долларов США). Каждую введенную сумму скрипт будет распределять по шести "конвертам":
- Конверт на "необходимые траты и нужды" получает 55% всех средств.
- Конверты на "финансовую свободу", "образование", "резерв и больше покупки" и "развлечения" получают по 10% средств.
- Конверт "на подарки" получает оставшиеся 5% средств
Для удобства работы с программой она будет разбита на небольшие куски. Внутри программы есть комментарии на английском языке, а вне кода куски программы прокомментированы на русском.
Инициализация переменных конвертов и коэффициентов:
<?php
//First program: envelops.php
//initializing empty envelops
$necessityEnvelop = 0; //NEC, необходимые траты
$freedomEnvelop = 0; //FFA, финансовая свобода
$educationEnvelop = 0; //EDU, образование
$longTermEnvelop = 0; //LTSS, резерв и на большие покупки
$playEnvelop = 0; //PLAY, развлечения
$giveEnvelop = 0; //GIVE, подарки
//initializing percent rate
$necRate = 0.55;
$ffaRate = 0.1;
$eduRate = 0.1;
$ltssRate = 0.1;
$playRate = 0.1;
$giveRate = 0.05;
Вывод приглашения в консоль:
//initializing expected income, expected necessity and other amounts
$expectedIncome = 1000;
//invitation, greetings etc.
echo "Hello.\n
We gonna fill your envelops by the money you input here!\n
Please input your amounts of money income and see the results.\n
Press Ctrl+c to exit script.
\n\n Enter the amount please:";
Основной цикл работы программы:
//initializing handler for standard input
$handle = fopen ("php://stdin","r");
$sum = 0;
while ($sum < $expectedIncome) {
$line = fgets($handle);
$sum += $line;
$necessityEnvelop += $line * $necRate;
$freedomEnvelop += $line * $ffaRate;
$educationEnvelop += $line * $eduRate;
$longTermEnvelop += $line * $ltssRate;
$playEnvelop += $line * $playRate;
$giveEnvelop += $line * $giveRate;
echo "\n Enter the amount please:";
}
Строка
$handle = fopen ("php://stdin","r");
означает следующее: в переменную $handle
будут поступать данные со стандартного потока ввода (из консоли), а строка
$line = fgets($handle);
означает "считать в переменную $line
одну строку из консоли".
Результирующий вывод данных:
//final output
echo "At the end we have:\n
Necessity Envelop has: $necessityEnvelop
Financial Freedom Envelop has: $freedomEnvelop
Education Envelop $educationEnvelop
Long Term Saving for Spending Envelop has: $longTermEnvelop
Play Envelop has: $playEnvelop
Give Envelop has: $giveEnvelop
_______________________________________________________________
Thanks for using our software :)"