Выпуск 18. Контратака на стороне сервера, редкое руководство по изучению PHP.

PHP
Выпуск 18. Контратака на стороне сервера, редкое руководство по изучению PHP.

предисловие

Я хочу спросить себя, зачем учитьсяPHP,чтоPHP, После обучения, что я могу сделать, будущее развитие, то, как выучить язык программирования, как давать советы по обучению.

phpЭто язык обучения для предполагаемых препроцессоров гипертекста широко используемого языка сценариев сценариев с открытым исходным кодом, который может быть встроенным вHTMLСредний, особенно подходитwebразработка.

PHPвстроенный на стороне сервераHTMLСкриптовый язык для документации. Стиль языка похож наCВ настоящее время этот язык широко используется многими программистами веб-сайтов. использоватьPHPМогут быть разработаны различные интерактивные динамические веб-страницы.

Так как же мы понимаем динамические веб-страницы? Давайте поговорим об этом далее:

В чем разница между динамическим сайтом и статическим сайтом?

  1. Динамические веб-сайты: веб-сайты, которые могут взаимодействовать с базами данных.
  2. Статический веб-сайт: не может взаимодействовать с базой данных

Также такие какLAMPЧто обозначают эти слова? Обычно используется в PHP:

Что такое LAMP? Вам нужно понять?

  1. L:LINUX
  2. A:Apache
  3. M:mysql
  4. P:PHP

Масштабируемость сообщает следующие величины, которые нам нужно постепенно понимать.

Настройка среды PHP (LAMP, LNMP, LNMPA)

LAMP: Linux+Apache+MySQL+PHP

LNMP: Linux+Nginx+MySQL+PHP

LNMPA: Linux+Nginx+MySQL+PHP+Apache

WAMP: Window+Apache+MySQL+PHP

Интегрированная среда:wampserver, xampp, phpstudy

апач, веб-сервер

Apacheявляется наиболее используемым в миреwebСерверное программное обеспечение, которое может работать практически на всех широко используемых компьютерных платформах, широко используется благодаря своей кроссплатформенности и безопасности.webОдно из серверных программ. Это быстро, надежно и простоapiрасширение.

Итак, давайте войдемPHPМир, пойми его грамматическую структуру!

базовая грамматика

PHPСтруктура документа: 1. Расширение документа.php2. Обратите внимание, что имя файла не должно использовать китайский язык и не должно содержать специальных символов

PHPСтиль маркера:

  • стандартный стиль

Взгляните на пример кода ниже:

<?php 代码段;?>
  • короткий стиль

Взгляните на пример кода ниже:

<?代码段;?>

Примечание: требуется настройкаPHPконфигурационный файлphp.iniсерединаshort_open_tag=On, начать сначалаApacheсервер может

  • ASPстиль:

Взгляните на пример кода ниже:

<% 代码段; %>

Примечание: требуется настройкаPHPконфигурационный файлphp.iniсерединаasp_tags=On, начать сначалаApacheсервер может

PHPПример грамматического стиля:

<?php
echo 'this is dada show dada';

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>55555--<?php echo 'hello world';?></title>
    <style media="screen">
      h1{
        color:<?php echo '5555';?>;
      }
    </style>
    <script type="text/javascript">
      alert('hello world');
    </script>
  </head>
  <body>
    <h1>this is dadada show time<?php echo 'dada';?></h1>
  </body>
</html>

<?php
// 标准风格的写法
// echo 输出一个或者多个字符串
/*
echo 'this is a dada';

echo '<br/>';

echo 'hello world';
*/

echo 'this is dada show time';

учитьсяphpНеобходимы инструменты, вот наиболее часто используемыеphpstorm

говорить оphpstormустановка и использование

phpstormдаJetBrainsРекламный ролик, разработанный компаниейPHPИнтегрированные инструменты разработки, которые могут помочь пользователям кодировать его в любое время, запустите тесты устройства или предоставляют визуальныеdebugФункции.

скачать

ВходитьphpstormОфициальный сайт, нажмите“downLoad”кнопку для входа на страницу загрузки.

Наконец, дважды щелкните значок на рабочем столе.

Структура синтаксиса PHP

phpПримечание по именованию файлов:

Примечания к переменным:

тип данных:

Специальные символы:

Разница между одинарными и двойными кавычками

  1. Двойные кавычки анализируют переменные, одинарные кавычки не анализируют переменные
  2. Одиночные цитаты быстро
  3. Двойные цитаты раздают все сложные эфиры, одиночные цитаты только решить\и\\Два escape-символа

значение фигурных скобок

  1. превратить переменные в целое
  2. Первое${变量名}变量名;
  3. секунда{$变量名变量名};

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

  1. intval(变量)Преобразовать в целое число
  2. strval(变量)преобразовать в строку
  3. boolval(变量)Преобразовать в логический тип

постоянное преобразование

  1. settype(переменная, заданный тип) заданный тип переменной
  2. gettype(переменная) получить тип переменной

Библиотека функций переменных определяет тип переменной

  1. is_int(переменная) > Обнаружить целое число
  2. is_string(переменная) > Определить тип строки
  3. is_array(переменная) > Определить тип массива
  4. is_resource(Переменная) > Определить тип ресурса
  5. is_object(Переменная) > Определить тип объекта
  6. is_null(переменная) > проверить нулевой тип
  7. is_numeric(Переменная)> числовое значение обнаружения

постоянный

  • В: Что такое константы?
  • Ответ: Константы — это противоположность переменных, которые нельзя изменить во время выполнения скрипта.

системная постоянная

  1. PHP_VERSION:получитьphpВерсия
  2. PHP_OS: получить операционную систему сервера
  3. M_PI:PIзначение
  • Меры предосторожности:
  1. Имя константы не предшествует$символ
  2. Начните с буквы или подчеркивания и попробуйте использовать заглавные буквы
  3. Константы определены и не могут быть изменены или отменены
  4. Значение константы может быть только скаляром, а ресурсы могут использоваться, но это не рекомендуется.
  5. Константы чувствительны к регистру по умолчанию

Проверить, определена ли константа

  1. definedфункция
  2. var_dump(definedПеременная)

магическая константа

  1. __LIEN__получить номер строки
  2. __FILE__Получить полный путь и имя файла файла
  3. __FUNCTION__имя функции
  4. __CLASS__своего рода
  5. __METHOD__метод
  6. __DIR__Возвращает путь, по которому находится файл

Соедините наши переменные в виде точек

Произвольно сгенерировать проверочный код

Давайте взглянем на следующий пример кода:

<!DOCTYPE html>
<html>
<head lang="en">
	<meta charset="UTF-8">
	<title></title>
	<script src="jquery-2.2.3.js" type="text/javascript"></script>
</head>
<body>
<?php
header("content-type:text/html;charset=utf-8");
$str = '';
$rand = mt_rand(1000, 9999);
$str.='<span style="color:rgb('.mt_rand(0, 255).',
    '.mt_rand(0, 255).','.mt_rand(0, 255).')
    ">'.mt_rand(0, 9).'<span>';
$str.='<span style="color:rgb('.mt_rand(0, 255).',
    '.mt_rand(0, 255).','.mt_rand(0, 255).')
    ">'.mt_rand(0, 9).'<span>';
$str.='<span style="color:rgb('.mt_rand(0, 255).',
    '.mt_rand(0, 255).','.mt_rand(0, 255).')
    ">'.mt_rand(0, 9).'<span>';
$str.='<span style="color:rgb('.mt_rand(0, 255).',
    '.mt_rand(0, 255).','.mt_rand(0, 255).')
    ">'.mt_rand(0, 9).'<span>';
?>
<label for="check">请输入验证码:</label>
<div id="hiddent_val" style="display: none;"><?php echo $str ?></div>
<input type="text" name="check" id="check_val"/><?php echo $str; ?>
<br/>
<input type="button" onclick="javascript:check();" value="提交"/>

<script>
 function check(){
   var v1=$("#hiddent_val").text();
   v1 = v1*1;
   var v2=$("#check_val").val();
   v2 = v2*1;
   if(v1==v2){
   	alert('true');
   }else{
    alert('false');
   }
 }
</script>
</body>
</html>

функция даты

Код формата функции даты:

data($format[,$time=time()])
time():
Y:年,m:月, d:日, h:小时, i:分钟, s:秒

w:星期一到星期天 0表示星期天
设置时区:函数形式
date_default_timezone_get()

date_default_timezone_set($timezone);

предопределенные переменные

Предопределенные переменные: переменные, которые были определены в системе следующим образом:

  1. $_POST:http-postпеременная, которая получает форму сpostданные отправлены
  2. $_GET:HTTP-getпеременная, которая получает?формальные данные параметра
  3. $_FILES:HTTPпеременная загрузки файла
  4. $_SERVER: переменные сервера и среды выполнения
  5. $_ENV: переменная окружения
  6. $_SESSION: переменная сеанса
  7. $_COOKIE:HTTP Cookies
  8. $_REQUEST:$_GET+$_POST+$COOKIE
  9. $php_errormsgпредыдущее сообщение об ошибке
  10. $GLOBALSSuperGlobals, встроенные переменные, которые всегда доступны во всех областях

Switch...case

покажи намSwitch...caseПример кода выглядит следующим образом:

<?php
$a = 2;
switch ($a){
    case 1:
        echo 'a<br/>';
        break;
    case 2:
        echo 'b<br/>';
        break;
    case 3:
        echo 'c<br/>';
        break;
        default:
        echo '默认的执行';
}

Например

покажи намforПример кода выглядит следующим образом:

<?php
//1到100的数进行相加   5050,
//1+2+3+4
$sum =0;
for($i=0;$i<101;$i++){
    $sum = $sum+$i;
}
echo $sum;
echo '<hr/>';
//1到100能够被2整除的数,
for($i=1;$i<101;$i++){
    if($i%2==0){
        echo '这是能够被2整除的数:'.$i.'<br/>';
    }
}

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

<?php

/* 1*1=1;
 * 1*2=2 2*2=4
 * */
for($i=1;$i<=9;$i++){
    for($j=1;$j<=$i;$j++){
        echo $j.'*'.$i.'='.($i*$j)."\t";
    }
    echo '<br/>';
}

специальный технологический контроль

Специальный контроль потока - пример:

<?php
//break跳出整个for循环
for($i=1;$i<10;$i++){
    if($i==3){
        break;
    }
    echo '这里是$i的值:'.$i.'<br/>';
}
echo '<hr/>';
//continue跳出当前循环
for($i=1;$i<10;$i++){
    if($i==3){
        continue;
    }
    echo '这里是$i的值:'.$i.'<br/>';
}
echo '<hr/>';


echo '这里是开始部分';
goto jump;
echo '这里是jump下面的代码';
jump:
echo '这里是jump里面的代码';

echo '<hr/>';
echo '这里是结束部分';

php-массив

Что такое массив PHP? Что такое массив? - массив: набор данных, вphpМассив на самом деле является упорядоченной картой.

пройти черезarray()Декларация формы:

  1. array()пустой массив
  2. array(值1,值2...)Нижний непрерывный массив индексов, нижний индекс массива начинается с 0
  3. array(key=>value,key=>value...)Индексированные массивы и ассоциации могут быть объявлены

пройти через:print_rпечатать массив

Массив или смешанный массив:

  1. Ключи массива могут быть целыми числами или строками
  2. Если имя ключа не является целым числом или строкой, будет выполнено следующее приведение
  3. Строки, содержащие действительные целочисленные значения преобразуются в целые числа
  4. Преобразование числа с плавающей запятой в целое число
  5. логическийtrueпреобразовать в 1,falseпреобразовать в 0
  6. nullПреобразовать в пустую строку
  7. Массивы и объекты нельзя использовать в качестве ключей

Создавайте массивы динамически и быстро

Динамически создать массив:

  1. $имя массива[]: индексированный массив с последовательными индексами
  2. $имя массива[数字]: указать индекс массива
  3. $имя массива[字符串]: связанный массив

Быстро создать массив - пример формата:

range($min, $max[$step=1]); 快速创建索引数组

compact($varname,...);快速创建关联数组

Изучаем небольшие примеры:

<?php
// $arr = array();
// var_dump($arr);
//索引数组 下标是从数字开始的
$arr = array(
    1,
    5.5,
    false,
    'dada'
);
print_r($arr);
echo '<hr/>';

//array(key=>value,key=>value...)
$arr1 = array(
  5=>'dada',
  6=>12,
    9=>false,
    4=>4.4
);
print_r($arr1);
echo '<hr/>';

//关联数组,下标是字符串
//username 可以称呼为我们的键名,
//我们的键名所对应的值就是键值
$arr2 = array(
  'username'=>'dada',
    'password'=>123456,
    'age'=>27
);
print_r($arr2);
echo '<hr/>';

//索引+关联混合使用
$arr3 = array(
  1,2,3,4,5,
    'username'=>'dadaqianduan',
    'addr'=>'haha'
);
print_r($arr3);
echo '<hr/>';

$arr3['username'] = 'dada';
print_r($arr3);

Обход массива через функцию указателя массива

  1. current($arr), получить значение ключа элемента, в котором находится текущий указатель массива
  2. key($arr), получить имя ключа элемента, в котором находится текущий указатель массива
  3. next($arr), Переместите указатель массива вниз и получите ключевое значение элемента местоположения указателя массива
  4. prev($arr), переместите указатель массива на один бит вверх и верните значение ключа элемента в текущей позиции указателя
  5. end($arr), перемещает указатель массива в конец массива и возвращает значение ключа текущего элемента
  6. reset($arr), переместить указатель массива в начало массива и вернуть значение ключа текущего элемента

Итерация по массиву с foreach

foreach(数组名称 as $key=>$val){}

Итерация по массиву со списком и каждым

  1. list($var[,$var...]): присвоить значение в массиве некоторой переменной
  2. each($arr)Возвращает массив текущих пар ключ/значение и движение вперед указателя на массив

Страница со списком пользователей

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

<tr style="text-align:center;">
</tr>
<?php foreach($userInfo as $val){
?>
<tr style="text-align:center;">
 <td><?php echo $val['id'];?></td>
 <td><img src="img/<?php echo $val['id'];?>" alt=""/></td>
</tr>
 <?php
 }?>

добавить страницу сообщения

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

<body>
 <h2>添加留言页面</h2>
 <form action="doAction.php?act=add" method="get">
  <table border="1" width="80%" cellpadding="0" cellspacing="0" bgcolor="blue">
  <tr>
   <td>留言者</td>
   <td><input type="text" name="username" id="" placholder="请输入您的呢称"/></td>
  </tr>
  </table>
 </form>
</body>

Отправить на размышление-doAction.php

<?php
$username = $_GET['username'];
$title = $_GET['title'];
$content = $_GET['content'];

$arr[] = array(
 'username' => $username,
 'title' => $title,
 'content' => $content
);
print_r($arr);

Соберите информацию о сообщении:

$filename = 'text.txt';
$data = 1;
file_put_contents($filename, $data);

<input type="hidden" name="act" value="add"/>

?php 
$username = isset($_GET['username']) ? $_GET['username'] : '';
$time = date('Y-m-d h:i:s');
$act = isset($_GET['act']) ? $_GET['act']:''; // 是否是添加页面

// 判断
if(file_exists($filename) && filesize($filename)>0){
 $str = file_get_contents($filename);
 $arr = unserialize($str);
}

if($act == 'add'){
 ...
 $arr = serialize($arr);
 file_put_contents($filename, $arr);
}
if($act == 'add') {
 $arr[] = array(
  'username' => $username,
  'title' => $title,
  'content' => $content,
  'time' => $time
 );
 $arr = serialize($arr);
 if(file_put_contents($filename, $arr)){
  echo'添加留言成功';
 }else{
  echo '添加留言失败';
 };
}

PHP-функция

Резюме 9:00 Обычно используемые функции, давайте посмотрим на то, что у них есть значение и эффект:

  1. strlen($string)получить длину строки
  2. Найти строку:
  • strpos($string,$search[,$offset]): Найти первое вхождение целевой строки в указанной строке.
  • stripos($string,$search[,$offset]): игнорировать регистр, чтобы найти
  • strrpos($string,$search[,$offset]): Найти последнее вхождение целевой строки в указанной строке.
  • strripos($string,$search[,$offset]): Игнорировать регистр, чтобы найти место последнего вхождения.
  • strstr|strchr($string,$search[,$before_needle]): находит первое возникновение строки, возвращает строку
  • strrchr($string,$search): найти последнее вхождение указанного символа в строку
  • stristr($string,$search[,$before_needle]): игнорировать регистр, чтобы найти
  • str_replace($search,$replace,$string): Найдите другую строку в указанной строке и замените ее указанной строкой после ее нахождения.
  • str_ireplace($search,$replace,$string): игнорирование регистра для поиска и замены
  1. струнный регистр
  • strtolower($string): возвращает строку после нижнего регистра
  • strtoupper($string): После череды возвратов капитала
  • ucwords($string): Сделать первую букву слова заглавной.
  • ucfirst($string): Сделать заглавной первую букву слова в строке.
  • lcfirst($string): строчная первая буква слова в строке
  1. символ ASCII
  • ord($char): получить ASCII указанного символа
  • chr($ascii): Получить указанный символ в соответствии с ASCII
  1. Строка занята
  • substr($string,$start[,$length]): Строка перехвата
  • substr_replace($string,$replace,$start[,$length]):заменить подстроку строки
  1. шифрование
  • md5($string): вычислить хеш-значение md5 строки, вернуть32строка битовой длины
  • sha1($string): вычислить хеш-значение sha1 строки, вернуть40строка битовой длины
  1. фильтр:
  • trim($string[,$charlist]): по умолчанию фильтруются пробелы на обоих концах строки, и указанная строка также может быть отфильтрована.
  • ltrim($string[,$charlist]): отфильтровать левый конец строки
  • rtrim | chop($string[,$charlist]): отфильтровать правый конец строки
  • strip_tags($string[,$allowTag]): фильтровать html-теги в строке
  • addslashes($string): Используйте обратную косую черту, чтобы заключать в кавычки специальные символы в строках.
  • htmlentities($string[,$flag=ENT_COMPAT]): преобразование всех символов в объекты HTML.
  • htmlspecialchars($string[,$flag=ENT_COMPAT]: преобразование специальных символов в строке в объекты HTML.
  • nl2br($string): вставить строку\nиспользовать<br/>заменять
  1. разделить/объединить
  • explode($delimiter,$string)Разбивает указанную строку на массив
  • implode | join($delimiter,$array)Объединяет значения ключей в массиве в строку с указанным разделителем
  • str_split($string[,$split_length=1])Строка в массив
  1. Общие функции
  • strrev($string)перевернуть строку
  • str_shuffle($string)Перемешать строку случайным образом
  • str_repeat($string)повторить строку
  • str_getcsv(...)Разобрать строку csv в массив
  • parse_str($str[,$arr])Разобрать строку на несколько переменных

Далее показано в виде таблицы.

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

функция инструкция
abs($number) найти абсолютное значение
ceil($number) округлен
floor($number) Отбросить дробную часть
round($number,$percision) округление
pow($base,$exp) возведение в степень
sqrt($number) квадратный корень
max($val1,$val2,..) найти максимальное значение
min($val1,$val2...) найти минимальное значение
mt_rand($min,$max) генерировать случайные числа

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

функция инструкция
date_default_timezone_get() получить часовой пояс по умолчанию
date_default_timezone_set($timezone) установить часовой пояс по умолчанию
date($format[,$time]) получить дату и время сервера
time() получить текущую метку времени
mktime() Получить метку времени unix даты
getdate($timestamp) Получить информацию о дате и времени
gettimeofday($return_float) Текущее время
microtime([$get_as_float]) Возвращает текущую временную метку unix и микросекунды
strtotime($time[,$now=time()]) Разбирает описание даты и времени любого английского текста какunixотметка времени

Создание операций с массивами

функция описывать
range($min, $max[,$step=1]) Быстро создавайте индексированные массивы с последовательными индексами
compact($varname,$varname...) Быстро создавать ассоциативные массивы
array_fill($start_index,$num,$value) Заполнить массив заданным значением
array_fill_keys($keys,$value) Заполняет массив указанными ключами и значениями
array_combine($keys,$values) Создайте массив с одним значением массива в качестве имени ключа и другим значением в качестве значения ключа.

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

функция описывать
count() Рассчитайте количество единиц в массиве или количестве атрибутов в объекте
array_keys($array) Получите ключевое имя массива и верните его как индексированный массив с последовательными индексами
array_values($array) Получите ключевое значение массива и верните его в виде индексированного массива с последовательными нижними индексами.
array_filp($array) Поменять местами имена клавиш и назначения в массивах
in_array() Проверить, существует ли значение в массиве
array_search() Ищет в массиве заданное значение и возвращает соответствующее имя ключа в случае успеха
arry_key_exists() Проверьте, существует ли данное имя ключа или индекс в массиве
array_reverse() инверсия массива
shuffle() Перемешать элементы массива
array_rand() Случайным образом извлеките ключевое имя массива
array_unique() удалить повторяющиеся значения из массива
array_sum() Подсчитайте сумму значений элементов в массиве

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

функция описывать
key($array) Получить ключевое имя элемента в текущей позиции указателя
current($array) pos($array) Получить ключевое значение элемента в текущей позиции указателя
next($array) Переместите указатель массива вниз на одну позицию и верните значение ключа элемента в текущей позиции указателя.
prev($array) Переместите указатель массива вверх на одну позицию и верните значение ключа элемента в текущей позиции указателя.
end($array) Переместите указатель массива в конец массива и верните значение ключа элемента в текущей позиции указателя.
reset($array) Переместите указатель массива в начало массива и верните ключевое значение элемента положения, в котором находится текущий указатель.
each($array) Возвращает текущую пару ключ-значение в массиве и перемещает указатель массива на одну позицию вниз
list($var,...) Присвоить значение элемента массива соответствующей переменной
array_unshift($array,$value...) Вставить элемент или элементы в начало массива
array_shift($array) Вытолкнуть первый элемент массива
array_push($array,$value...) Нажмите элемент или элементы в конце массива
array_pop($array) Вытолкнуть последний элемент массива

Таблица разделения и слияния массива выглядит следующим образом:

функция описывать
array_slice($array,$offset) массив перехвата
array_merge() Объединить массивы

Использование пользовательских функций

Как объявить функцию? Давайте посмотрим на следующий код:

function 函数名称([参数...]){
 函数体;
 return 返回值;
}

Меры предосторожности:

  • Имя функции не должно содержать специальных символов, начинаться с буквы или подчеркивания, за которым следует цифра, буква и подчеркивание.
  • Имена функций предпочтительно должны иметь ясное значение и начинаться с глагола.
  • Имена функций должны предпочтительно следовать за верблюжьим регистром или символом подчеркивания.
  • Имена функций не поддерживают повторяющиеся имена
  • Имена функций не чувствительны к регистру, но лучше всего следовать регистру при вызове.
  • параметры функции не требуются
  • Функция возвращает Null по умолчанию, и возвращаемое значение также может быть добавлено с помощью return

Далее, давайте посмотрим на введенные параметры функции:

Параметры делятся на формальные параметры и фактические параметры:

Формальные параметры, параметры, объявленные при определении функции (обязательные параметры: при вызове функции параметры должны быть переданы; необязательные параметры: если при вызове функции параметры не передаются, используется значение по умолчанию;)

Аргументы, фактические параметры, передаваемые при вызове функции

Затем разберитесь с областью действия переменных, как показано на следующей карте ума:

Далее поговорим о разнице между передачей по значению и передачей по ссылке:

  1. Изменения переменных, передаваемых функцией по значению, в теле функции не влияют на саму переменную.
  2. Передача по ссылке изменений переменной в теле функции влияет на саму переменную

Перезвони

Что такое функция обратного вызова?

В процессе разработки иногда требуется выполнить несколько несвязанных операций над объектом или значением, поэтому лучшим способом будет использование обратных вызовов.

<?php
function text1(){
 echo '我是达达';
}
function text2($username){
 echo '我是哪吒';
}
// 回调函数:函数体内的名称是我们要传入的参数();
function callBack($call,$str){
 $call($str);
}
// 回调函数的使用就是传入的参数是你想要回调的函数名称
callBack('text2','dadaqianduan');

рекурсивная функция

Что такое рекурсивная функция, то есть тело функции вызывает само себя

Пример написания:

function text($i) {
 echo $i;
 $i--;
 if($i>=0){
  text($i);
 }
}

text(2);

анонимная функция

Пример анонимной функции:

$str = function() {
 echo 'dadaqianduan';
};
$str();

$str1 = function($username) {
 echo 'dada';
 echo $username;
};
$str1('哪吒');

php включаемый файл

php файл содержит:include,include_once,require,require_once, заключается в том, чтобы включить содержимое одного файла в другой файл.

  • requireКогда в справочном файле есть ошибка, это ошибка и предупреждение
  • includeДва предупреждения при ссылке на файл
  • Обработка ошибок:requireвыдаст фатальную ошибку и остановит скрипт
  • Обработка ошибок:includeвыдаст только предупреждение, и скрипт продолжит работу

Поэтому здесь рекомендуется использоватьincludeОй!

includeилиrequireоператор получит весь текст, код, разметку, которые существуют в указанном файле, и скопирует их с помощьюincludeфайл выписки.

Формат синтаксиса следующий:

include 'filename';
或
require 'filename';

php включает пример:

Давайте создадим стандартный файл нижнего колонтитула с именем «dada.php» со следующим кодом:

<?php
 echo '<p> 达达 哪吒</p>';
?>

Затем вам нужно сослаться на этот файл нижнего колонтитула на другой странице следующим образом:

<html>
 <body>
  <p>魔王哪吒</p>
  <?php include 'footer.php'; ?>
 </body>
</html>

require_once/include_oncerequire/includeФункция та же самая, разница в том, что целевой контент будет проверен первым, если он был импортирован ранее.Если он был импортирован, тот же контент не будет импортирован снова.

объектно-ориентированный

Прежде всего, что такое объектно-ориентированный?

Это идея, способ разработки, а не фактический код.

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

  1. На самом деле ориентированность на процесс делает акцент на функциональном поведении (как сделать что-то одно).
  2. Объектно-ориентированный — это инкапсулировать функции в объекты, подчеркивая объекты функциями (кто что-то одно сделает)
  3. Объектно-ориентированные функции: наследование, инкапсуляция, полиморфизм

Несколько путей:

OOA(Object Oriented Analysis)面向对象分析

OOD(Object Oriented Design)面向对象设计

OOP(Object Oriented Programming)面向对象编程

классы и объекты

Когда дело доходит до объектной ориентации, отношения между классами и объектами неразрывны: класс — это абстракция конкретной транзакции, а объект — это конкретный экземпляр этого класса.

Как определить класс, определение класса: (аналогично ключевому слову класса для определения)

class Person{
}

<?php
// 定义一个人类
class Person{
 // 类里面是有属性和方法存在的
 // public 访问修饰符
 public $userName = 'dada';
 public $age = 12;
}
// 通过new 关键字来创建我们的对象
$p = new Person();
echo $p->userName.'<hr/>';
echo $p->age.'<hr/>';

Поговорим о свойствах, поговорим о методах, следующий пример:

<?php
class Person{
 public $userName;
 public $age;
 // 类里面的行为称为方法
 public function eat() {
  echo '我要吃饭';
 }
}
$p = new Person();
$p->eat();

Объекты размещаются в памяти

Давайте поговорим о анализе памяти объектов. В PHP память разделена на четыре:

  1. Группа данных: Используется для хранения программы, инициализирована до 0, а не в качестве глобальных переменных: статические переменные и константы
  2. Сегмент кода: хранить функции, методы
  3. Сегмент пространства стека: хранить небольшие данные
  4. Сегмент пространства кучи: хранит объекты и ссылки с большими объемами данных.

модификатор доступа php

Какие есть модификаторы доступа? Показано ниже:

  1. publicпубличный, по умолчанию
  2. protectedбыть защищенным
  3. privateчастный

Пример кода выглядит следующим образом

<?php
class Da{
 public $userName = 'dada';
 protected $age = 12;
 public function eat() {
  echo '我要吃饭';
 }
}
$da = new Da();
echo $da->userName

echo $da->age // 报错

изменить, как показано ниже:

<?php
class Da{
 public $userName = 'dada';
 protected $age = 12;
 public function eat() {
  echo '我要吃饭';
  //$this
  echo $this->age;
 }
}
$da = new Da();
echo $da->userName

echo $da->eat()

Конструктор и деструктор

Прежде всего, что такое конструктор? Конструктор черезnewобъект будет называться.

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

<?php
class Person {
 public $userName;
 public $age;
 // php5.5之前的写法
 // public function Person() {
 //  echo '我是构造函数';
 // }
 // 通过一个魔术常量来写构造函数
 public function _construct($userName,$age) {
  // $this表示的是当前对象
  $this->userName = $userName;
  $this->age = $age;
 }
 // 析构函数
 public function _destruct(){
  echo '析构函数'
 }
}
$p1 = new Person('dada',12);
echo $p1->userName
$p1 = null; // 析构函数被调用

установить и получить магические методы

учитьсяset和getметод:setПредоставляет методы для установки свойств элемента для внешнего мира, в то время какgetПредоставляет доступ к свойствам члена внешнему миру.

Итак, магическая константа:_setи_get.

Следующий пример:

<?php
class Person{
 private $userName;
 private $age;
 public function setAge($age){
  // $this->age = 12;
  // $this-age == private $age;
  $this->age = $age;
 }
 public function getAge(){
  return $this->age;
 }
 public function _set($key,$value){
  $this->userName = $value;
 }
 public function _get($key){
 return $this->userName;
}
$p = new Person();
// echo $p->userName;
$p->setAge(16);
echo $p->getAge();

магические методы isset и unset

  1. _issetпри внешнем вызовеisset()Функция вызывается автоматически при обнаружении недоступного свойства или свойства, которое не существует.
  2. _unsetпри вызове вне классаunsetВызывается автоматически при уничтожении недоступного свойства.

В следующем примере показано:

<?php
class Person{
 private $userName;
 private $age;
 public $abc;
 public function _construct($userName,$age){
  $this->userName=$userName;
  $this->age=$age;
 }
 public function _isset($name){
  echo '当外部调用isset()函数检测不可访问的属性或者不存在的属性时自动调用';
  return isset($name); // boolean
 }
 public function _unset($name){
  echo '当在类外部调用unset销毁不可访问属性时调用';
 }
}
$p = new Person('dada',12);
var_dump(isset($p->userName));
// echo '<hr/>'
unset($p->abc);

наследовать

Давайте поговорим о характеристиках объектно-ориентированного наследования, инкапсуляции и полиморфизма:

Так в чем же смысл наследования?Использование наследования может уменьшить дублирование кода,extendsключевое слово для наследования.

Пример кода выглядит следующим образом:

<?php
class Person{
 public $userName;
 public $age;
 public function eat(){
  echo 'dadaqianduan';
 }
}
class Student extends Person{
}
$stu = new Student();
echo $stu->eat();

использоватьparentключевые слова

используется в наследствоparent, код показан ниже:

<?php
class Person {
 public $userName='parent';
 public $age = 100;
 protected function eat() {
  echo `老爸要吃饭`;
 }
}
class Student extends Person {
 public $userName = 'children`;
 public $age = 12;
 // 重写 需要访问的修饰符必须和父类的平级或者大于父类,方法名字相同
 public function eat() {
  parent::eat().'<hr/>';
  echo 'children';
 }
}
$stu = new Student();
echo $stu->eat();

Используйте последнее ключевое слово

Примечания по использованию ключевого слова final:

  • finalКлючевые слова не могут изменять свойства
  • одеялоfinalмодифицированныйclassи методы не могут быть унаследованы или переопределены

Используйте статическое ключевое слово

staticИспользуется для обозначения статического:

  1. одеялоstaticИзмененные свойства и методы являются статическими свойствами и методами.
  2. Статические свойства и методы характеризуются отсутствием вызова свойств и методов через объекты.
  3. Свойства и методы можно вызывать по имени класса

Следующий пример кода выглядит следующим образом:

class Person {
 public static $i = 1;
 public static function eat(){
  echo '要吃饭';
 }
}
echo Person::$i;
Person::eat();

selfпройти внутрь классаselfдля доступа к статическим свойствам и методам:

Следующий пример кода выглядит следующим образом:

class Student {
 public static $i = 1;
 public static function eat(){
  echo self::$i;
 }
}
Student::eat();

Следующий пример статической привязки используется следующим образом:

<?php
class A{
 public static function text1(){
  echo 'text1';
 }
 public static function text2(){
  echo 'text2';
  self::text1();
 }
}
class B extends A {
 public static function text1(){
  echo 'B-A';
 }
}
B::text2();

Используйте ключевое слово const

const, является константным модификатором, характеристики констант, не могут быть изменены, уникальные идентификаторы, обратите внимание на следующее: константы должны быть написаны с заглавной буквы, не могут быть доступны через объекты и не нуждаются в добавлении$символ.

система управления студентами

Пример подключения к базе данных:

<?php
header("content-type:text/html;charset=urf-8");
// 建立连接并且返回连接对象
$link = mysqli_connect('localhost','root','root') or die('连接失败');
// 设置字符集
mysqli_set_charset($link,'utf8');
// 打开指定数据库
mysqli_select_db($link, 'dadaqianduan');
// 执行sql语句
$query = "insert user values(1,'dada','12345')“;
$res = mysqli_query($link, $query);
if($res){
 echo '插入数据成功';
}else{
 echo '插入数据失败';
}

такmysqliШаги для работы с базой данных:

  1. соединятьmysql
  2. установить набор символов
  3. Откройте указанную базу данных
  4. воплощать в жизньsqlЗапрос
  5. бесплатный набор результатов
  6. закрыть соединение

Если нам нужно переписывать базу данных подключения каждый раз, когда мы ее используем, мы можем ее инкапсулировать:

Обернутый массив:config.php

<?php
$config = array(
    'host'=>'localhost',
    'user'=>'root',
    'password'=>'root',
    'charset'=>'utf8',
    'dbName'=>'dadaqianduan'
);


define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PWD','root');
define('DB_CHARSET','utf8');
define('DB_DBNAME','dadaqianduan');

соединять

<?php
/**
 * 连接
 * @param string $host
 * @param string $user
 * @param string $password
 * @param string $charset
 * @param string $database
 * @return object 连接标识符
 */
function connect1($host,$user,$password,$charset,$database){
 $link = mysqli_connect($host,$user,$password) or die('数据库连接失败');
 mysqli_set_charset($link,$charset);
 mysqli_select_db($link,$database) or die('指定数据库打开失败');
 return $link;
}

Соединение требует передачи массива

/**
 * 连接 需要传递数组
 * @param array $config
 * @return object
 */
function connect2($config){
 $link=mysqli_connect($config['host'],$config['user'],$config['password']);
 mysqli_set_charset($link,$config['charset']);
 mysqli_select_db($link,$config['dbName'] or die('指定数据库打开失败');
 return $link;
}

Установить связь в виде константы

/**
 * 用常量的形式建立连接
 * @return unknown
 */
function connect3(){
 $link = mysqli_connect(DB_HOST,DB_USER,DB_PWD) or die('数据库连接失败');
 mysqli_set_charset($link,DB_CHARSET);
 mysqli_select_db($link,DB_DBNAME) or die('指定数据库打开失败');
 return $link;
}

операция вставки

/*
 array(
 'username'=>'dada',
 'password'=>'dada',
 'age'=>'123456',
 'regTime'=>'12345'
 );
 INSERT user(username,password,age,regTime) VALUES('dada','dada','12','123123123');
 */
/**
 * 插入操作
 * @param object $link
 * @param array $data
 * @param string $table
 * @return boolean
 */
// 插入的封装
function insert($link,$data,$table){
 $keys=join(',',array_key($data));
 $vals = "'".join("','", array_values($data))."'";
 $query = "insert{$table}({$keys})values({$vals})";
 $res = mysqli_query($link,$query);
 if($res){
  return mysqli_insert_id($link);
 }else{
  return false;
 }
}

операция обновления

/*
 array(
 		'username'=>'dada',
 		'password'=>'dada',
 		'age'=>'12',
 		'regTime'=>'123123123'
 );
 UPDATE user SET username='dada',password='dada',age='12',regTime='123123123' WHERE id=1
*/
/**
 * 更新操作
 * @param object $link
 * @param array $data
 * @param string $table
 * @param string $where
 * @return boolean
 */
function update($link, $data, $table, $where = null) {
	foreach ( $data as $key => $val ) {
		$set .= "{$key}='{$val}',";
	}
	$set = trim ( $set, ',' );
	$where = $where == null ? '' : ' WHERE ' . $where;
	$query = "UPDATE {$table} SET {$set} {$where}";
	$res = mysqli_query ( $link, $query );
	if ($res) {
		return mysqli_affected_rows ( $link );
	} else {
		return false;
	}
}

удалить операцию

//DELETE FROM user WHERE id=
/**
 * 删除操作
 * @param object $link
 * @param string $table
 * @param string $where
 * @return boolean
 */
function delete($link, $table, $where = null) {
	$where = $where ? ' WHERE ' . $where : '';
	$query = "DELETE FROM {$table} {$where}";
	$res = mysqli_query ( $link, $query );
	if ($res) {
		return mysqli_affected_rows ( $link );
	} else {
		return false;
	}
}

запросить все записи

/**
 * 查询所有记录
 * @param object $link
 * @param string $query
 * @param string $result_type
 * @return array|boolean
 */
function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) {
	$result = mysqli_query ( $link, $query );
	if ($result && mysqli_num_rows ( $result ) > 0) {
		while ( $row = mysqli_fetch_array ( $result, $result_type ) ) {
			$rows [] = $row;
		}
		return $rows;
	} else {
		return false;
	}
}

получить количество записей в таблице

/**
 * 得到表中的记录数
 * @param object $link
 * @param string $table
 * @return number|boolean
 */
function getTotalRows($link, $table) {
	$query = "SELECT COUNT(*) AS totalRows FROM {$table}";
	$result = mysqli_query ( $link, $query );
	if ($result && mysqli_num_rows ( $result ) == 1) {
		$row = mysqli_fetch_assoc ( $result );
		return $row ['totalRows'];
	} else {
		return false;
	}
}

Получить количество записей в результирующем наборе

/**
 * 得到结果集的记录条数
 * @param object $link
 * @param string $query
 * @return boolean
 */
function getResultRows($link, $query) {
	$result = mysqli_query ( $link, $query );
	if ($result) {
		return mysqli_num_rows ( $result );
	} else {
		return false;
	}
}

Инкапсуляция для получения информации:

/**
 * @param object $link
 */
function getServerInfo($link) {
	return mysqli_get_server_info ( $link );
}
/**
 * @param object $link
 */
function getClientInfo($link) {
	return mysqli_get_client_info ( $link );
}

/**
 * @param object $link
 */
function getHostInfo($link){
	return mysqli_get_host_info($link);
}

/**
 * @param object $link
 */
function getProtoInfo($link) {
	return mysqli_get_proto_info ( $link );
}

Первое знакомство с Redis

Ниже показано введение, а ментальная карта выглядит следующим образом:

Redis является открытым исходным кодом (BSDLicense), система хранения структуры данных в оперативной памяти, которую можно использовать в качестве базы данных, кэша и промежуточного программного обеспечения для обмена сообщениями. Он поддерживает множество типов структур данных, таких как строки (strings), хэш (hashes), список (list), собирать(sets), упорядоченный набор (sorted sets) с запросами диапазона,bitmaps,hyperloglogsи геопространственный (geospatial) Запрос радиуса индекса.Redisвстроенная копия (replication), LUA-скрипты (Lua scripting), события привода LRU (LRU eviction), транзакция (transactions) и различные уровни сохраняемости диска (persistence) и через Redis Sentinel (Sentinel) и автоматическое разбиение (Cluster) обеспечивает высокую доступность (high availability).

преимущество:

  1. Постоянная память, превосходная производительность чтения и записи, намного лучше, чем на жестком дискеIO
  2. Поддержка различных форматов данных, может удовлетворить различные потребности бизнеса
  3. Данные могут быть автоматически сохранены на жесткий диск, и служба может быть восстановлена ​​​​при перезапуске службы, а служба стабильна и долговечна.

действоватьRedisУстановить

Windowустановить под ссылка для скачивания:https://github.com/tporadowski/redis/releases.

RedisПоддерживаются как 32-битные, так и 64-битные версии. Это необходимо выбрать в соответствии с реальной ситуацией на вашей системной платформе, здесь мы загружаемRedis-x64-xxx.zipСжать пакет на диск С, после распаковки переименовать папку вredis.

Откройте папку со следующим содержимым:

открыть одинcmdиспользование окнаcdкоманда для переключения каталога наxxx:\redisбегать:

redis-server.exe redis.windows.conf

начать другойcmdОкно, не закрывайте исходное, иначе вы не сможете получить доступ к серверу.

Windows быстро настраивает переменные среды PHP+MySQL (phpStudy)

Установите, вступит ли в силу:

ComposerдаPHPиспользуется для управления зависимостями (dependency) инструмент отношений. Вы можете объявить внешние библиотеки инструментов, от которых вы зависите в своем проекте (libraries),ComposerПоможет вам установить эти зависимые файлы библиотек.

https://getcomposer.org/

нажмитеGetting Started

нажмите, чтобы скачать:

https://developer.aliyun.com/composer?spm=a2c4e.11153940.0.0.40eb6995J6zupg

экзамен:

WindowsБыстрая настройкаNodeJS

Настройте командную строку источника зеркала Taobao:

npm config set registry http://registry.npm.taobao.org

WindowsБыстрая настройкаBower

существуетWindowsиспользовать подphpStudyУстановить

Используйте облачный сервер Tencent

fastadmin.net/go/tencent

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.htmlскачать

https://www.bt.cn/?invite_code=MV9veWhubmU=

Нажмите, чтобы установить сейчасhttps://www.bt.cn/bbs/thread-19376-1-1.html

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

Разрешение доменного имени

Ошибка:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at admin@php.cn to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Исправлять.htaccessдля следующего

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
  • Node.js(Необязательно, используется для установки Bower и LESS, а также необходимо использовать для упаковки и сжатия)
  • Composer(необязательно, для управления сторонними пакетами расширений)
  • Bower(необязательно, для управления внешними ресурсами)
  • Less(необязательно, используется для редактирования меньшего количества файлов, если вам нужно добавить или изменить стили css, лучше установить его)

Обратите внимание, не потеряйтесь

Ну все,выше все содержание этой статьи.Люди которые здесь видят таланты. Я буду продолжать обновлять статьи, связанные с технологиями, в будущем.Если вы считаете, что статья полезна для вас, пожалуйста, поставьте лайк и поделитесь, спасибо! !