Главная Обратная связь Поможем написать вашу работу!

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля? 4 часть



$f=$b+$a; // Число: 11

?>

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

<? if ((int)$a < (int)$b) : ?>

или

<? if ((string)$a < (string)$b) : ?>

Управляющие конструкции

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

 

Операторные скобки {..}

if (expr)

statement

[else]

statement

 

while (expr) statement

 

do {

statement

} while(expr)

 

for (expr1; expr2; expr3) statement

 

 

foreach(array_expression as $value) statement

foreach(array_expression as $key => $value) statement

 

foreach ($arr as $value) {

echo "Value: $value<br>\n";

}

 

$a = array (1, 12, 3, 8, 6, 17);

$v = 5;

foreach ($arr as $key => $value) {

echo "Key: $key; Value: $value<br>\n";

 

break, continue – управляют ходом выполнения циклов

 

switch (var) {

case num0: statement; break;

case num1: statement; break;

default: statement;

}

Подпрограммы

function foo ($arg_1, $arg_2, ..., $arg_n) {

echo "Example function.\n";

return $retval;

}

Функция может содержать любые конструкции PHP и даже другие функции, а также классы.

Возвращаемое значение может быть как простым типом, так и массивом:

function small_numbers() {

return array (0, 1, 2);

}

list ($zero, $one, $two) = small_numbers();

В PHP4 добавлена поддержка функций с неопределенным числом аргументов func_num_args(), func_get_arg(), and func_get_args() .

PHP поддерживает классы

Эта поддержка не обеспечивает в полной мере все объектно-ориентрированного программирования, так как инкапсуляция и полиморфизм не реализованы.

Объявление:

class Stack {

var $elements; // Items in our shopping cart

var $count;

function Stack()

{ $count=0; }

function push ($num) {

$this->elements[++$count] = $num;

}

function pop() {

return $this->elements[--$count];

}

}

}

Наследование рассматривается как расширение:

class Dec extends Stack {

}

Создание объектов:

$S = new Dec()

Важно! При создании объекта его конструктор вызывается автоматически, при этом конструктор класса предка автоматически не вызывается.



 


22.Технология PHP. Массивы, предопределенные переменные (массивы), ссылки, подпрограммы.

PHP – язык разработки для Интренет. Разработан независимым разработчиком Расмусом Ледорфом. Полная информация о языке и синтаксисе на сайте www.php.net/.

PHP можно установить в двух вариантах: как отдельный интерпретатор, работающий через интерфейс CGI, или как модуль веб-сервера, встроенный в сам сервер. В последнем случае становятся актуальными все преимущества PHP. Программа на языке PHP, как правило, не живет сама по себе, а применяется для обработки запросов пользователя. Даже если интерпретатор PHP встроен в сервер как модуль, с точки зрения самой пользовательской программы, она работает через CGI.

Ближайшим аналогом PHP является ASP, но технология ASP не реализована в среде Unix/Apache, где PHP постепенно завоевывает лидирующие позиции.

PHP является процедурным языком, его можно разделить на собственно язык и библиотеку функций. Существует большое количество инструментальных средств, библиотек для PHP, интерфейсы ко всем популярным СУБД, почтовым протоколам, к разделяемой памяти, графическим файлам, архивам и множество других инструментов.

Основы языка PHP

Скрипт на PHP представляет собой файл, как правило, с суффиксом .phtml, .php3 или .php, который внутри выглядит как обычная страница на HTML. Отличие проявляется только в виде тега <?php ?>, содержащего скриптовые программы. Часто применяют сокращенную форму <? ?> или, для совместимости с визуальными средствами формирования страниц, <% %>. Внутри этих тегов располагается код на языке PHP. Вот тривиальный пример страницы:



<? include('header.html' ?>

<h1>Hello WEB!</h1>

<? echo something?>

<? include('footer.html') ?>

Посетителю будет показан документ составленный из заголовка – файла header.html и завершения - footer.html, между ними будет просто включены в тот документ, что отдается сервером посетителю страницы. Таким образом можно отделить оформление страницы от ее наполнения.

Текст скрипта выполняется сверху вниз и справа налево, последовательно. Эта последовательность может быть изменена операторами цикла и условными операторами. Для в стандартный выходной поток используются функции: echo something; print(something)

Использование массивов

Объявление обычных одномерных массивов:

$aChars[0] = ‘a’;

$aChars[1] = ‘d’;

$aChars = array (1, 12, 3, 8, 6, 17);

Массивы могут быть многомерными а также хеш-массивами.

Объявление хэш массива

$a[0]=5; // Массив

$a['old']=5; // Хэш-массив

Многомерные массивы могут быть построены на основе хеш-массива

$$people = array(

"Petrov" => array(

"old" => "34",

"weight" => "79",

"length" => "178"

),

"Kozlov" => array(

"old" => "18",

"weight" => "68",

"length" => "172"

),

"Sokolov" => array(

"old" => "20",

"weight" => "84",

"lenght" => "188"



)

);

echo $a["Kozlov"]["old"]; # will output 18

?>

Ттип данных - хэш-массив (hash array). В принципе, это обычный массив, только индексом у него выступает строка, а не целое число. PHP также позволяет создавать многомерные массивы с произвольно пересекающимися индексами, как строками так и целыми индексами.

Подпрограммы

function foo ($arg_1, $arg_2, ..., $arg_n) {

echo "Example function.\n";

return $retval;

}

Функция может содержать любые конструкции PHP и даже другие функции, а также классы.

Возвращаемое значение может быть как простым типом, так и массивом:

function small_numbers() {

return array (0, 1, 2);

}

list ($zero, $one, $two) = small_numbers();

 

В PHP4 добавлена поддержка функций с неопределенным числом аргументов func_num_args(), func_get_arg(), and func_get_args() .


23.Технология PHP. Интерфейс к базам данных.

Работа с БД

PHP поддерживает наиболее популярные СУБД, а также интерфейс ODBC, позволяющий использовать практически любые БД. Основным недостатком библиотек PHP доступа к ДБ – специализированность под конкретные СУБД. Т.е. функции доступа к БД имеют префикс, так например функции соединения с БД и исполнения запроса в различных СУБД: ORA_Open, ORA_Exec, mysql_connect, mysql_query, odbc_connect, odbc_exec, pg_Connect, pg_Exec. Рассмотрим работу с БД на примере MySQL.

Операции над БД можно разделить на две группы: манипулирования таблицами базы данных и самими данными. К первой группе относят:

· Создание/удаление баз данных;

· Создание/удаление таблиц баз данных;

Во вторую группу входят:

· добавление данных;

· просмотр данных;

· изменение значений данных;

· удаление записей таблиц.

 

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

Для баз данных MySQL это делается с помощью функции:

int mysql_connect(string [hostname [:port] [:/path/to/socket] ] , string [username] , string [password] );

$host=”localhost”;

$host=”wed”;

$password=”H;pz0237jen”;

$link =mysql_connect($host,$user,$password) { or die ("Could not connect"); }

Эта функция возвращает идентификатор соединения. Если соединение не было установлено возвращается 0. Идентификатор можно и не указывать в функциях, если в рамках данной программы происходит соединение только с одним сервером MySQL.

Закрыть соединения:

int mysql_close(int [link_identifier] );

mysql_close($link);

Для создание БД предназначена функция:

int mysql_create_db(string database name, int [link_identifier] );

if (mysql_create_db ("students",$link)) {

print ("Database created successfully\n");

} else {

printf ("Error creating database: %s\n", mysql_error ());

}

Установить текущую БД:

int mysql_select_db(string database_name, int [link_identifier] );

mysql_select_db ("students") { or die ("Could not select database");}

Удалить БД:

int mysql_drop_db(string database_name, int [link_identifier] );

 

Создать, удалить таблицы в БД, можно с помощью SQL-запросов переданных в функцию:

int mysql_query (string database_name, int [link_identifier] );

или

int mysql_db_query(string database, string query, int [link_identifier] );

при этом запрос query может быть вида “CREATE TABLE…”, “DROP TABLE…”, “INSERT…”, “UPDATE…”, “SELECT…”, и т.д.

В зависимости от выполняемого запроса команда возвращает различные объекты:

TRUE или FALSE -результат выполнения запроса CREATE, INSERT, UPDATE и т.п.

$query = “CREATE TABLE()”

if (mysql_create_db ($query, $link)) {

print ("Table created successfully\n");

} else {

printf ("Error creating table: %s\n", mysql_error ());

 

Для запросов типа DELETE, INSERT, REPLACE, UPDATE можно получить количество обработанных записей. Эту возможность реализует функция

int mysql_affected_rows(int [link_identifier] );

$SQL=”UPDATE student SET GroupID=$newGroupID WHERE AvgBall=3”;

$resut = mysql_query($SQL,$link);

printf( “Обработано %d записей\n”, mysql_affected_rows($link ));

 

Очень важно, что в составе строки SQL-запроса могут присутствовать имена переменных, которые при вызове преобразуются в значения, которые имеют эти переменные. Например

“INSERT INTO Subscriber(name,email) VALUES($sname,$semail)”

Эти правила работают не только в SQL-запросах, но и во всех других операциях со строками.

При выполнении запроса “SELECT” функция mysql_query возвращает идентификатор результата (выборки), который можно использовать для получения данных этого запроса.

$query = "SELECT last_name, first_name FROM friends";

$result = mysql_query ($query) {

Для получения количества извлеченных полей используется функция:

int mysql_num_fields(int result);

Для получения количества записей (строк) результата используется функция:

int mysql_num_rows(int result);

Для обработки полученной выборки (результата) используется целый набор функций:

int mysql_result(int result, int row, mixed [field] );

first_name = mysql_result( $result, 1, mixed [field] );

Возвращает значение указанного поля текущей записи полученной выборки.

row – индекс, имя поля, либо алиас.

Большую эффективность и удобство при обработке результатов дают функции целой строки:

array mysql_fetch_row(int result); // возвращает текущую запись в виде массива

$row = mysql_fetch_row($result);

printf(“Имя-%s\n”, $row[1]);

array mysql_fetch_array (int result); // возвращает текущую запись в виде массива и

$row = mysql_fetch_array($result);

printf(“Имя-%s\n”, $row[“first_name”]);

object mysql_fetch_object(int result, int [result_typ] );

возвращает запись в виде объекта:

позволяет обращаться к полям по индексам

$row = mysql_fetch_object ($result);

printf(“Имя-%s\n”, $row->first_name);

При получении записей из результата с помощью функций fetch курсор перемещается на следующую запись. Установить курсор можно принудительно, использую функцию:

int mysql_data_seek(int result_identifier, int row_number);

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

int mysql_field_seek(int result, int field_offset);

После завершения обработки результата его необходимо удалить (происходит очистка памяти):

int mysql_free_result(int result);

 

Пример вывода всех строк рзультата

while($row = mysql_fetch_array($result)) {

echo $row["user_id"];

echo $row["fullname"];

}

mysql_free_result($result);

 

Несколько функций позволяют получить информацию о структуре БД, таблицах и полях:

int mysql_list_dbs(int [link_identifier] ); // Получить список БД MySQL доступных на сервере

Поолучить список таблиц конкретной БД:

int mysql_list_tables(string database, int [link_identifier] );

Поолучить список полей таблицы:

int mysql_list_fields(string database_name, string table_name, int [link_identifier] );

string mysql_tablename(int result, int i); // Возвращает имя таблицы

 

$result = mysql_list_tables("BSTU");

$i = 0;

while ($i < mysql_num_rows ($result)) {

$tb_names[$i] = mysql_tablename ($result, $i);

echo $tb_names[$i] . "<BR>";

$i++;

}

Следующее семейство функций имеет одинаковый синтаксис:

Mysql_filed_имя(int result, int field_offset);

 

mysql_field_table – возвращает имя таблицы, которой принадлежит поле

mysql_field_name – возвращает имя поля,

mysql_field_type – возвращает тип поля ("int", "real", "string", "blob",)

mysql_field_flags — возвращает строку установленных флагов (not_null", "primary_key", т.д.)

mysql_field_len – возвращает длину поля

Функции обработки ошибок

string mysql_errno(int [link_identifier] ); // Возвоашает номер ошибки

string mysql_error(int [link_identifier] ); // Возвоашает текстовое сообщение об ошибке

24.Объектно–ориентированная модель PHP: ключевые особенности классической и современной моделей.

PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.

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

Экземпляр класса - это объект. Объект - это совокупность данных (свойств) и функций (методов) для их обработки. Свойства и методы называются членами класса. Вообще, объектом является все то, что поддерживает инкапсуляцию.

Если класс можно рассматривать как тип данных, то объект — как переменную (по аналогии). Скрипт может одновременно работать с несколькими объектами одного класса, как с несколькими переменными.

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

 

PHP поддерживает классы. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает все три основных механизма ООП — инкапсуляцию, полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent.

Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием оператора ->. Для доступа к членам класса из его методов используется переменная $this.

Описание классов

Описание классов в PHP начинаются служебным словом class:

class Имя_класса {

// описание членов класса - свойств и методов для их обработки

}

Для объявления объекта необходимо использовать оператор new:

Объект = new Имя_класса;

Данные описываются с помощью служебного слова var. Метод описывается так же, как и обыкновенная пользовательская функция. Методу также можно передавать параметры.

Пример класса на PHP:

<?php

// Создаем новый класс Coor:

class Coor {

// данные (свойства):

var $name;

var $addr;

 

// методы:

function Name() {

echo "<h3>John</h3>";

}

 

}

// Создаем объект класса Coor:

$object = new Coor;

?>

Для получения доступа к членам класса предназначен оператор ->. Приведем пример:

$object -> Name();

Чтобы получить доступ к членам класса внутри класса, необходимо использовать указатель $this, который всегда относится к текущему объекту. Модифицированный метод Getname():

function Getname() {

echo $this->name;

}

Конструкторы

Конструктор представляет собой метод, который задает значения некоторых свойств (а также может вызывать другие методы). Конструкторы вызываются автоматически при создании новых объектов. Чтобы это стало возможным, имя метода-конструктора должно совпадать с именем класса, в котором он содержится. Пример конструктора:

<?

class Webpage {

var $bgcolor;

function Webpage($color) {

$this->bgcolor = $color;

}

}

 

// Вызвать конструктор класса Webpage

$page = new Webpage("brown");

?>

PHP 5 позволяет объявлять методы-конструкторы. Классы, в которых объявлен метод-констуктор, будут вызывать этот метод при каждом создании нового объекта, так что это может оказаться полезным, чтобы, например, инициализировать какое-либо состояние объекта перед его использованием. Конструктор, ранее совпадавший с названием класса, теперь необходимо объявлять как __construct(), что позволит легче перемещать классы в иерархиях. Конструкторы в классах-родителях не вызываются автоматически. Чтобы вызвать конструктор, объявленный в родительском классе, следует обратиться к методу parent::__construct().

<?php

class BaseClass {

function __construct() {

print "Конструктор класса BaseClass\n";

}

}

 

Поддержка деструктора для класса, определяемого как метод __destructor()

PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО языках, таких, как Java: когда освобождается последняя ссылка на объект, перед высвобождением памяти, занимаемой этим объектом, вызывается метод __destruct(), не принимающий параметров.

<?php

class MyDestructableClass {

function __construct() {

print "Конструктор\n";

$this->name = "MyDestructableClass";

}

 

function __destruct() {

print "Уничтожается " . $this->name . "\n";

}

}

 

$obj = new MyDestructableClass();

?>

Как и в случае с конструкторами, деструкторы, объявленные в родительском классе, не будут вызваны автоматически. Для вызова деструктора, объявленном в классе-родителе, следует обратиться к методу parent::__destruct().

• Константы класса

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

<?php

class MyClass {

const SUCCESS = "Success";

const FAILURE = "Failure";

}

print MyClass::SUCCESS;

?>

Статические члены класса

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

<?php

class Singleton {

static private $instance = NULL;

 

private function __construct() {

}

 

static public function getInstance() {

if (self::$instance == NULL) {

self::$instance = new Singleton();

}

return self::$instance;

}

}

?>

Статические методы

Вы можете теперь определить методы как статические, разрешая им быть вызванными вне контекста объекта. Статические методы не определяются через переменную $this, поскольку они не должны быть ограничены определенным объектом.

<?php

class MyClass {

static function helloWorld() {

print "Hello, world";

}

}

MyClass::helloWorld();

?>

Явное клонирование объекта

Копия объекта создается с использованием вызова clone (который вызывает метод __clone() объекта, если это возможно). Вы можете объявить метод __clone(), который будет вызван при клонировании объекта (после того, как все свойства будут скопированы из исходного объекта).

copy_of_object = clone $object;

<?php

class MyClass {

function __clone() {

print "Объект был клонирован ";

}

}

$obj = new MyClass();

clone $obj;

?>

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

Теперь на практике рассмотрим, что же представляет собой наследование (или расширение возможностей) классов:

<?php

class B extends A {

function B(параметры_для_A, другие_параметры) {

$this->A(параметры_для_A);

// инициализируем другие поля B

}

 

function TestB() { ... }

function Test() { ... }

}

?>

Наследование

Ключевое слово extends говорит о том, что создаваемый класс является лишь "расширением" класса A, и не более того. То есть B содержит те же самые свойства и методы, что и A, но, помимо них и еще некоторые дополнительные, "свои".

Теперь "часть A" находится прямо внутри класса B и может быть легко доступна, наравне с методами и свойствами самого класса B. Например, для объекта $obj класса B допустимы выражения $obj->TestA() и $obj->TestB().

Немного о терминологии: родительский класс A принято называть базовым классом, а класс дочерний класс B — производным от A. Иногда базовый класс также называют суперклассом, а производный — подкласcом.

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

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

<?php

class A {

// Выводит, функция какого класса была вызвана

function Test() { echo "Test from A\n"; }

// Тестовая функция — просто переадресует на Test()

function Call() { Test(); }

}

class B extends A {

// Функция Test() для класса B

function Test() { echo "Test from B\n"; }

}

$a=new A();

$b=new B();

?>

Используем следующие следующие команды:

$a->Call(); // выводит "Test from A"

$b->Test(); // выводит "Test from B"

$b->Call(); // Внимание! Выводит "Test from B"!

Функция, переопределяемая в производном классе, называется виртуальной.

Обращение к элементам классов в PHP5 (::)

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

При обращении к этим элементам извне класса, программист должен использовать имя этого класса.

Обозначение "двойное двоеточие" (::) не менялось ни разу в течение всего времени разработки PHP.

 

Абстрактные классы

PHP 5 поддерживает определение абстрактных классов и методов. Создавать экземпляр класса, который был объявлен абстрактным, нельзя. Класс, в котором объявлен хотя бы один абстрактный метод, должен также быть объявлен абстрактным. Методы, объявленные как абстрактные, несут, по существу, лишь описательный смысл и не могут включать какой-либо функционал. Класс может быть объявлен как абстрактный при помощи использования ключевого слова abstract, для исключения из обработки движком описания класса. Однако, вы можете наследовать абстрактные классы. Практический пример:

<?php

 

abstract class AbstractClass {

 

/* Данный метод должен быть определён в дочернем классе */

abstract protected function getValue();

 

/* Общий метод */

public function print() {

print $this->getValue();

}

 

}

 

class ConcreteClass1 extends AbstractClass {

protected function getValue() {

return "ConcreteClass1";

}

}

 

class ConcreteClass2 extends AbstractClass {

 

protected function getValue() {

return "ConcreteClass2";

}

}

$class1 = new ConcreteClass1;

$class1->print();

$class2 = new ConcreteClass2;

$class2->print();

?>

Абстрактные методы

Метод может быть объявлен как abstract, таким образом отложив его определение наследуемым классом. Класс, который включает абстрактные методы, должен быть объявлен как abstract.

<?php

abstract class MyBaseClass {

abstract function display();

}

?>

Интерфейсы

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

Интерфейсы объявляются так же, как и обычные классы, но с использованием ключевого слова "interface"; тела методов интерфейсов должны быть пустыми. Для включения интерфейса в класс программист должен использовать ключевое слово "implements" и описать функционал методов, перечисленных во включаемом интерфейсе. Если это требуется, классы могут включать более одного интерфейса путём их перечисления через пробел.

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

<?php

interface ITemplate

{

public function setVariable($name, $var);

public function getHtml($template);

}

 

class Template implements ITemplate

{

private $vars = array();

 

public function setVariable($name, $var)

{

$this->vars[$name] = $var;

}

 

public function getHtml($template)

{

foreach($this->vars as $name => $value) {

$template = str_replace('{'.$name.'}', $value, $template);

}

 

return $template;

}

}

?>

Метод final

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


Просмотров 391

Эта страница нарушает авторские права




allrefrs.ru - 2021 год. Все права принадлежат их авторам!