Php урок 11. Написание своих функций

Автор: | 14.09.2015

 

отправка email ссылка на скачивание 

Код файла index.php

<?
include_once 'Mail.php';

$from = 'test@mail.ru'; //change this to your email address
$to = 'test@mail.ru'; // change to address

$name=$_POST['name'];
$tel=$_POST['tel'];
$body=$name . " " . $tel;
$title="Заказать звонок";
$subject = $title; // subject of mail
$body = $body; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject,
      'MIME-Version' => 1,
    'Content-type' => 'text/html;charset=utf-8'
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.mail.ru',
        'port' => '465',
        'auth' => true,
        'username' => 'test@mail.ru', //your mail account
        'password' => 'pass' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);
    if($mail===true) {
      echo ("Ваше сообщение отправлено, мы обязательно его рассмотрим.");
    } else {
      echo ("Сообщение не было доставлено.<br>Текст сообщения:");
      var_dump($mail);
    }
?>

функция mail

<?
function send_email($name,$tel) {
  $subject = 'Запись на школу программирования';
  $name = "=?UTF-8?B?".base64_encode($name)."?=";
  $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
  $to = 'saltik91@mail.ru';
  $headers = "From: $name\r\n";
  $headers .= "MIME-Version: 1.0" . "\r\n";
  $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
  $message.="Имя" . $name . "<br>" . $tel;
  $message = wordwrap($message, 70);
  $send = mail($to, $subject, $message, $headers);
}
$name=$_POST['name'];
$tel=$_POST['tel'];
send_email($name,$tel);
header('Refresh:3;url=index.php');
  echo "<meta charset='utf-8'>";
  echo "Сообщение отправлено!";
?>

 

Написание своих функций:

В любом языке программирования существуют подпрограммы. В языке C они называются функциями, в ассемблере — подпрограммами, а в Pascal существуют даже два вида подпрограмм: процедуры и функции.

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

В PHP такими подпрограммами являются пользовательские функции.

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

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

Перечислим особенности пользовательских функций в PHP:

  • Доступны параметры по умолчанию. Есть возможность вызывать одну и ту же функцию с переменным числом параметров;
  • Пользовательские функции могут возвращать любой тип;
  • Область видимости переменных внутри функции является иерархической (древовидной);
  • Есть возможность изменять переменные, переданные в качестве аргумента.

В PHP программисту дана достаточно высокая свобода при создании пользовательских функций. В отличии от языка C++ в пользовательских функциях доступны параметры по умолчанию.

 

Предположим перед нами стоит задача решить несколько арифметических действий с 2умя числами. Пусть эти числа будет определять рандом. Итак как бы мы это сделали не зная про функции:

<?
$c1 = rand(1, 10);
$c2 = rand(1, 10);
$sum= $c1+$c2;
$pr = $c1*$c2;
$prim = $pr/$sum*($pr-$sum);
echo "Числа: $c1 и $c2<br>Сумма: $sum<br>Произведение: $pr<br>Пример: $prim";
?>

а вот так можно сделать с помощью функции:

<?
for ($i=0; $i < 5; $i++) {
    $c1 = rand(1, 10);
    $c2 = rand(1, 10);
    echo prim($c1, $c2)."<hr>";
}

function prim($c1 = 1, $c2 = 1) {
  $sum= $c1+$c2;
  $pr = $c1*$c2;
  $prim = ceil($pr/$sum*($pr-$sum));
  return "Числа: $c1 и $c2<br>Сумма: $sum<br>Произведение: $pr<br>Пример: $prim";
}
?>

Параметры по умолчанию

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

  • Параметров слишком много. При этом нет смысла каждый раз указывать все параметры;
  • Функции должны возвращать значения разных типов в зависимости от набора параметров.

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

<?php
function makecup($type = "Чая")
{
     return "Сделайте чашечку $type.\n";
}
echo makecup();
echo makecup("Кофе");
?>

Результат работы приведенного скрипта будет таким:

Сделайте чашечку Чая
Сделайте чашечку Кофе

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

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

<?php
function makecup($type = "чая", $cond)
{
     return "Сделайте чашечку $type $cond.\n";
}
  
echo makecup("горячего");   // Не будет работать так, как мы могли бы ожидать
?>

Результат работы приведенного выше скрипта будет примерно следующим:

Warning: Missing argument 2 for makecup() in c:\inetpub\php.su\test.php on line 2Сделайте чашечку горячего .

Теперь видоизменим рассмотренный скрипт, исправив в нем ошибки:

<?php
function makecup($cond, $type = "чая")
{
     return "Сделайте чашечку $type $cond.\n";
}
  
echo makecup("горячего");   // Теперь наш скрипт работает корректно! 
?>

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

Сделайте чашечку чая горячего.

<?
//-------------------------------------------------------------
function add1($a,$b)
{
$c=$a+$b;	
echo "$a+$b=$c<br>";
}
//-------------------------------------------------------------
function add2($a,$b)
{
$c=$a+$b;	
return $c;
}
//-------------------------------------------------------------
function add3($a,$b=0,$c=0,$d=0,$e=0,$f=0)
{
$c=$a+$b+$c+$d+$e+$f;	
return $c;
}
//-------------------------------------------------------------
function my_func(){
  $args = func_get_args();
  $summ=0;
  echo "<hr>";
  foreach ($args as $arg) {
    echo "$arg+";
  $summ+=$arg;
  }
  echo "=$summ<br>";
}
//-------------------------------------------------------------
function rec($a)
{
if($a==0)return 0;

return $a+rec($a-1);

}
//-------------------------------------------------------------
add1(1,4);
echo (add2(1,4)+add2(2,5));
echo "<br>";
echo add3(1,2,3);
echo "<br>";
echo add3(1,2,3,4,5,6);
my_func(1,2,3,4,5,6,7,8,9);

echo rec(10);


function kirtolat($text)
{
  $abc = ["А"=>"A", "а"=>"а", "Б"=>"B", "б"=>"b", "В"=>"V", "в"=>"v", "Г"=>"G", "г"=>"g", "Д"=>"D", "д"=>"d", "Е"=>"E", "е"=>"e", "Ё"=>"YO", "ё"=>"yo", "Ж"=>"J", "ж"=>"j", "З"=>"Z", "з"=>"z", "И"=>"i", "и"=>"i", "Й"=>"Y", "й"=>"y", "К"=>"K", "к"=>"k", "Л"=>"L", "л"=>"l", "М"=>"M", "м"=>"m", "Н"=>"N", "н"=>"n", "О"=>"O", "о"=>"o", "П"=>"P", "п"=>"p", "Р"=>"R", "р"=>"r", "С"=>"S", "с"=>"s", "Т"=>"T", "т"=>"t", "У"=>"U", "у"=>"u", "Ф"=>"F", "ф"=>"f", "Х"=>"H", "х"=>"h", "Ц"=>"C", "ц"=>"c", "Ч"=>"CH", "ч"=>"ch", "Ш"=>"SH", "ш"=>"sh", "Щ"=>"ScH", "щ"=>"sch", "Ъ"=>"'", "ъ"=>"'", "Ы"=>"I", "ы"=>"i", "Ь"=>"'", "ь"=>"'", "Э"=>"E'", "э"=>"e'", "Ю"=>"YU", "ю"=>"yu", "Я"=>"YA", "я"=>"ya",];
  foreach($abc as $kir=>$lat)
    {
    $text=str_replace($kir,$lat,$text);	
    }
  echo $text;
}

kirtolat("Привет мир");
?>

 

<?
function compress($path,$file)
{
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
//error_reporting(0);
ini_set('memory_limit', '512M');
if($ext=='jpg' || $ext=='jpeg'|| $ext=='png')
{
 $sfile=$path."s/".$file;
 $lfile=$path."l/".$file;
 $fullfile=$path.$file;
 if(!($im = imagecreatefromjpeg($fullfile)))
 $im = imagecreatefrompng($fullfile);
 if($im)
 {
 $iw = imagesx($im); $ih = imagesy($im);
 $k = 850 / $iw;
 if($k>1)$k=1;
 $sx = floor($iw * $k); $sy = floor($ih * $k);
 $im_m = imagecreatetruecolor($sx, $sy);
 imagealphablending( $im_m, false );
 imagesavealpha( $im_m, true );
 $transparent = imagecolorallocatealpha($im_m, 255, 255, 255,255);
 imagefilledrectangle($im_m, 0, 0, $sx, $sy, $transparent); 
 imagecopyresampled($im_m, $im, 0, 0, 0, 0, $sx, $sy, $iw, $ih);
 $r_l = imagejpeg($im_m,$lfile);
 $iw = imagesx($im); $ih = imagesy($im);
 $k = 400 / $iw;
 if($k>1)$k=1;
 $sx = floor($iw * $k); $sy = floor($ih * $k);
 $im_m = imagecreatetruecolor($sx, $sy);
 imagealphablending( $im_m, false );
 imagesavealpha( $im_m, true );
 $transparent = imagecolorallocatealpha($im_m, 255, 255, 255, 127);
 imagefilledrectangle($im_m, 0, 0, $sx, $sy, $transparent); 
 imagecopyresampled($im_m, $im, 0, 0, 0, 0, $sx, $sy, $iw, $ih);
 $r_s = imagejpeg($im_m,$sfile);
 }
else
 {
 copy($fullfile, $lfile);
 copy($fullfile, $sfile);
 }
}
error_reporting(1);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<?
$files=scandir("gallery");//получить список файлов из одной папки
/*foreach($files as $file)
{
  compress("gallery/",$file);
}*/
$count=count($files);//колчиство элементов в массиве (колчиство файлов)
$page_count=10;//задаем количество картинок на одной странице
$pages=$count/$page_count;//считаем количество страниц
?>
<div class="container">
  <h1>Галерея с фотообоями</h1>
  <ul class="pagination">
  <?
  $pagination="";
  for($i=0;$i<$pages-1;$i++)
    {
    $p=$i+1;
    $pagination.="<li><a href='?id=$i'>$p</a></li> ";
    }
  echo $pagination;	
  ?>
  </ul>
  <hr>
  <?
  $st=$_GET['id']*$page_count;
  $en=$st+$page_count;
  for($i=$st;$i<$en;$i++)
    {
    echo "<div class='col-md-6' style='height:400px'>
      <div class='thumbnail'>
        <img src='gallery/s/{$files[$i+2]}' >
        
      </div>
      <a href='gallery/{$files[$i+2]}' download>Скачать</a>
    </div>";
    }
  ?>
  <hr>
  <ul class="pagination">
  <?
  echo $pagination;
  ?>
  </ul>
</div>

</body>
</html>

 

Раздел: PHP