- PHP расшифровывается как PHP: Hypertext Preprocessor
- Файлы PHP могут содержать текст, HTML, код JavaScript и код PHP
- Код PHP выполняется на сервере, а результат возвращается в браузер в виде обычного HTML
- Расширение файлов PHP по умолчанию — ".php"
Что умеет PHP?
- PHP может генерировать динамическое содержимое страниц
- PHP может создавать, открывать, читать, записывать и закрывать файлы на сервере
- PHP может собирать данные форм
- PHP может отправлять и получать куки
- PHP может добавлять, удалять и изменять данные в вашей базе данных
- PHP может ограничить пользователям доступ к некоторым страницам вашего сайта
- PHP может шифровать данные
Установка
Если ваш сервер не поддерживает PHP, вы должны:
- Установить веб-сервер
- Установить PHP
- Установить базу данных, например MySQL
Официальный сайт PHP (PHP.net) содержит инструкции по установке PHP:http://php.net/manual/en/install.php
Рекомендуемая интегрированная среда разработки: WAMPhttp://www.wampserver.com/
Базовый синтаксис PHP
PHP-скрипты можно размещать в любом месте документа.
PHP-скрипты начинаются с <?php и заканчиваются ?>:
<!DOCTYPE html> <html> <body> <h1>我的第一个 PHP 页面</h1> <?php echo "Hello World!"; // 这是一行注释 /* 这是 多行 注释 */ ?> </body> </html>
Каждая строка кода в PHP должна заканчиваться точкой с запятой
Две основные инструкции для вывода текста в браузере: echo и print.
Переменные PHP
Переменные начинаются с символа $, за которым следует имя переменной
В PHP нет команды для объявления переменных.
Переменная создаётся, когда вы впервые присваиваете ей значение:
PHP — слабо типизированный язык
PHP автоматически преобразует переменную в правильный тип данных на основе её значения.
В строго типизированных языках программирования мы должны объявить (определить) тип и имя переменной перед её использованием.
Область видимости переменных в PHP
В PHP есть четыре различные области видимости переменных:
- local
- global
- static
- параметр
Локальная и глобальная область видимости
Переменные, определённые вне всех функций, имеют глобальную область видимости. Глобальные переменные доступны из любой части скрипта, кроме функций. Чтобы получить доступ к глобальной переменной внутри функции, нужно использовать ключевое слово global.
Переменные, объявленные внутри функции PHP, являются локальными переменными и доступны только внутри функции:
<?php
$x=5; // 全局变量
function myTest()
{
$y=10; // 局部变量
echo "<p>测试变量在函数内部:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}
myTest();
echo "<p>测试变量在函数外部:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>
Чтобы получить доступ к глобальной переменной, определённой вне функции, изнутри функции, нужно добавить ключевое слово global перед переменной внутри функции:
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
PHP хранит все глобальные переменные в массиве с именем $GLOBALS[index]. Индекс содержит имя переменной. Этот массив доступен внутри функций, и его также можно использовать напрямую для обновления глобальных переменных.
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
?>
Статическая область видимости
Когда функция завершает работу, все её переменные обычно удаляются. Однако иногда вы хотите, чтобы локальная переменная не удалялась; для этого можно использовать ключевое словоstatickeyword
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
Область видимости параметров
Параметры — это локальные переменные, которые получают значения, переданные функции вызывающим кодом.
Параметры объявляются в списке параметров как часть объявления функции:
<?php
function myTest($x)
{
echo $x;
}
myTest(5);
?>
Операторы echo и print в PHP
- echo — может выводить одну или несколько строк
- print — позволяет выводить только одну строку, а его возвращаемое значение всегда равно 1
Совет: echo выводит быстрее, чем print, у echo нет возвращаемого значения, а у print возвращаемое значение равно 1.
И echo, и print являются языковыми конструкциями. При их использовании можно опустить скобки или добавить скобки: echo или echo(), print или print().
<?php echo "<h2>PHP is fun!</h2>"; echo "Hello world!<br>"; echo "I'm about to learn PHP!<br>"; echo "This", " string", " was", " made", " with multiple parameters."; print "<h2>PHP is fun!</h2>"; print "Hello world!<br>"; print "I'm about to learn PHP!"; ?>
В следующем примере показано, как использовать команду echo для вывода переменных и строк:
<?php
$txt1="Learn PHP";
$txt2="example.com";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "Study PHP at $txt2"; //php 双引号内部可包含变量
echo "My car is a {$cars[0]}"; //用大括号 显式的指定这是变量
$txt1="Learn PHP";
$txt2="example.com";
$cars=array("Volvo","BMW","Toyota");
print $txt1;
print "<br>";
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";
?>
Типы данных PHP5
String, Integer, Float, Boolean, Array, Object, NULL (нулевое значение).
String
Любой текст можно заключать в одинарные и двойные кавычки:
<?php $x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; //单引号 包括字符串字面量 双引号包含的字符串 可包含变量 echo $x; ?>
Integer
В следующем примере мы протестируем различные числа. PHPvar_dump()Эта функция возвращает тип данных и значение переменной:
?php $x = 5985; var_dump($x); echo "<br>"; $x = -345; // 负数 var_dump($x); echo "<br>"; $x = 0x8C; // 十六进制数 var_dump($x); echo "<br>"; $x = 047; // 八进制数 var_dump($x); ?>
Float
<?php $x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3; var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x); ?>
Boolean
Boolean может быть TRUE или FALSE.
Массив
Массив может хранить несколько значений в одной переменной
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
Object
В PHP объекты должны быть объявлены.
Сначала необходимо объявить класс с помощью ключевого слова class. Класс — это структура, которая может содержать свойства и методы.
Затем мы определяем типы данных в классе, а затем используем типы данных в экземпляре класса:
<?php
class Car
{
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
function print_vars($obj) {
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
// instantiate one object
$herbie = new Car("white");
// show herbie properties
echo "\herbie: Properties\n";
print_vars($herbie);
?>
Значение NULL
Значение NULL указывает на то, что переменная не имеет значения. NULL — это значение с типом данных NULL.
<?php $x="Hello world!"; $x=null; var_dump($x); ?>
Константы
Константа — это идентификатор для простого значения. Это значение нельзя изменить во время выполнения скрипта. (Имя константы не требует модификатора $.)
Примечание: Константы можно использовать во всем скрипте.
Чтобы задать константу, используйте функцию define(), синтаксис которой следующий:
define(string constant_name, mixed value, case_sensitive = true)
Эта функция имеет три параметра:
- constant_name: Обязательный параметр, имя константы, т. е. идентификатор.
- value: Обязательный параметр, значение константы.
- case_sensitive: Необязательный параметр, указывает, учитывается ли регистр; установите значение true, чтобы указать, что регистр не учитывается.
В следующем примере создаётся константа, чувствительная к регистру, со значением "Welcome to example.com!":
<?php
define("GREETING", "Welcome to example.com!");
echo GREETING;
?>
Строковые функции и конкатенация строк
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2; // 字符串连接运算符 .
echo strlen("Hello world!"); //获取字符串长度
echo strpos("Hello world!","world"); //获取子串位置
//字符串中第一个字符的位置是 0
?>
Операторы
<?php
//其他运算符略..
//逻辑运算符 ! && || and or xor
//数组运算符 合并: + 比较:== != === !==
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>
Операторы управления потоком, такие же, как в JS
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
$t=date("H");
if ($t<"10")
{
echo "Have a good morning!";
}
else if ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "Your favorite color is red!";
break;
case "blue":
echo "Your favorite color is blue!";
break;
case "green":
echo "Your favorite color is green!";
break;
default:
echo "Your favorite color is neither red, blue, or green!";
}
//循环
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "<br>";
}
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "<br>";
}
?>
Массивы
<?php
$cars=array("Volvo","BMW","Toyota"); //数组定义 数值数组
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . "."; //访问数组元素
//数组长度count()
$cars=array("Volvo","BMW","Toyota");
echo count($cars); //count() 函数用于返回数组的长度
//遍历数值数组
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");//定义关联数组
echo "Peter is " . $age['Peter'] . " years old.";
//遍历关联数组
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
Сортировка массива
PHP — Функции сортировки массивов
- sort() - сортирует массив по возрастанию
- rsort() - сортирует массив по убыванию
- asort() - сортирует ассоциативный массив по возрастанию в соответствии со значением
- ksort() - сортирует ассоциативный массив по возрастанию в соответствии с ключом
- arsort() - сортирует ассоциативный массив по убыванию в соответствии со значением
- krsort() — сортирует ассоциативный массив в порядке убывания по ключу
//sort()
$cars=array("Volvo","BMW","Toyota");
sort($cars);
$clength=count($cars);
for($x=0;$x<$clength;$x++)
{
echo $cars[$x];
echo "<br>";
}
//rsort()
$cars=array("Volvo","BMW","Toyota");
rsort($cars);
//asort() arsort() 关联数组排序 value
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
asort($age);
arsort($age);
//ksort() krsort() 关联数组排序 key
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
ksort($age);
krsort($age);
?>
Суперглобальные переменные
PHP предопределяет несколько суперглобальных переменных, что означает, что они доступны во всех областях видимости на протяжении всего скрипта.
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_COOKIE
- $_FILES
- $_ENV
- $_SESSION
$GLOBAL — это глобальный объединённый массив, содержащий все переменные. Имена переменных являются ключами массива.
<?php
$x = 75;
$y = 25;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
$_SERVER — это массив, содержащий информацию, такую как заголовки, пути и расположение скриптов. Элементы этого массива создаются веб-сервером. Нет гарантии, что каждый сервер предоставит все элементы;
<?php echo $_SERVER['PHP_SELF']; // /try/demo_source/demo_global_server.php echo "<br>"; echo $_SERVER['SERVER_NAME']; // example.com echo "<br>"; echo $_SERVER['HTTP_HOST']; // www.example.com echo "<br>"; echo $_SERVER['HTTP_REFERER']; //来由 echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; //浏览器 echo "<br>"; echo $_SERVER['SCRIPT_NAME']; // /try/demo_source/demo_global_server.php //另外$_SERVER对象还包括 SERVER_ADDR, SERVER_PROTOCOL ,REQUEST_METHOD..等属性 ?>
$_REQUEST используется для сбора данных, отправленных HTML-формами.
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>
$_POST широко используется для сбора данных формы. Укажите этот атрибут в теге HTML-формы: "method="post"
<html> <body> <!--页面post给自己--> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>
$_GET также широко используется для сбора данных формы. Укажите этот атрибут в теге HTML-формы: "method="get".
$_GET также может собирать данные, отправленные в URL.
<html> <body> <a href="test_get.php.html">Test $GET</a> </body> </html> //test_get.php <html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>
Функции PHP
Настоящая сила PHP заключается в его функциях.
В PHP предоставлено более 1000 встроенных функций.
<html>
<body>
<?php
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
//函数传参
function writeName($fname,$punctuation)
{
echo $fname . " Refsnes" . $punctuation . "<br>";
}
echo "My name is ";
writeName("Kai Jim",".");
echo "My sister's name is ";
//函数返回值
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>
Магические переменные
Существует восемь магических констант, значения которых меняются в зависимости от их положения в коде.
- _LINE__
Текущий номер строки в файле. - FILE
Полный путь и имя файла. Если используется внутри включённого файла, возвращается имя включённого файла. - DIR
Каталог файла. Если используется внутри включённого файла, возвращается каталог включённого файла. - FUNCTION
Имя функции (новое в PHP 4.3.0). Начиная с PHP 5 эта константа возвращает имя функции в том виде, в котором оно было определено (с учётом регистра). В PHP 4 значение всегда в нижнем регистре.
<?php
function test() {
echo '函数名为:' . __FUNCTION__ ;
}
test();
?>
- CLASSИмя класса (новое в PHP 4.3.0). Начиная с PHP 5 эта константа возвращает имя класса в том виде, в котором оно было определено (с учётом регистра).
В PHP 4 значение всегда в нижнем регистре. Имя класса включает объявленную область видимости (например, Foo\Bar). Обратите внимание, что начиная с PHP 5.4CLASSоно также работает с трейтами. При использовании в методе трейта,CLASSэто имя класса, который использует метод трейта.
<?php
class test {
function _print() {
echo '类名为:' . __CLASS__ . "<br>";
echo '函数名为:' . __FUNCTION__ ;
}
}
$t = new test();
$t->_print();
?>
- TRAITИмя трейта (новое в PHP 5.4.0). Начиная с PHP 5.4.0 PHP реализует механизм повторного использования кода, называемый трейтами.
Имя трейта включает объявленную область видимости (например, Foo\Bar).
Унаследованный член из базового класса переопределяется методом MyHelloWorld, вставленным в трейт SayWorld. Его поведение совпадает с методом, определённым в классе MyHelloWorld. Порядок приоритета таков: методы текущего класса переопределяют методы трейта, а методы трейта, в свою очередь, переопределяют методы базового класса.
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
- METHODИмя метода класса (новое в PHP 5.0.0). Возвращает имя метода в том виде, в котором оно было определено (с учётом регистра).
<?php
function test() {
echo '函数名为:' . __METHOD__ ;
}
test();
?>
- NAMESPACEИмя текущего пространства имён (с учётом регистра). Эта константа определяется во время компиляции (новое в PHP 5.3.0).
<?php namespace MyProject; echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject" ?>
Пространства имён
Пространства имён PHP были добавлены в PHP 5.3. Если вы изучали C# и Java, пространства имён не являются чем-то новым. Однако в PHP они всё ещё имеют немаловажное значение.
Пространства имён PHP могут решить следующие два типа проблем:
- Конфликты имён между пользовательским кодом и внутренними классами/функциями/константами PHP.
- Создание псевдонимов (или сокращённых) имён, что улучшает читаемость исходного кода.
По умолчанию все константы, классы и имена функций размещаются в глобальном пространстве, точно так же, как это было до поддержки пространств имён в PHP.
Если файл содержит пространства имен, объявление пространства имен должно идти перед всем остальным кодом.
< ?php
// 定义代码在 'MyProject' 命名空间中
namespace MyProject;
// ... 代码 ...
//也可以在同一个文件中定义不同的命名空间代码
namespace MyProject1;
// MyProject1 命名空间中的PHP代码
namespace MyProject2;
// MyProject2 命名空间中的PHP代码
// 另一种语法
namespace MyProject3 {
// MyProject3 命名空间中的PHP代码
}
?>
Единственный допустимый код перед объявлением пространства имен — это оператор declare, используемый для определения кодировки исходного файла. Любой не-PHP код, включая пробельные символы, не может находиться перед объявлением пространства имен.
<?php
declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
Следующий код вызовет синтаксическую ошибку:
<html> <?php namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
Подпространства имен
<?php
namespace MyProject\Sub\Level; //声明分层次的单个命名空间
//创建了常量 MyProject\Sub\Level\CONNECT_OK,
//类 MyProject\Sub\Level\Connection
//和函数 MyProject\Sub\Level\Connect.
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */ }
?>
Использование пространств имен
На имена классов в пространствах имён PHP можно ссылаться тремя способами:
Неквалифицированные имена, или имена классов без префикса, например $a=new foo(); или foo::staticmethod();. Если текущее пространство имен — currentnamespace, foo будет разрешено в currentnamespace\foo. Если код, использующий foo, глобальный, т.е. код, не содержащийся ни в каком пространстве имен, foo будет разрешено в foo. Предупреждение: если функция или константа в пространстве имен не определена, неквалифицированное имя функции или имя константы будет разрешено в глобальное имя функции или имя константы.~~Ссылка без префикса пространства имен: по умолчанию ищет в текущем пространстве имен, затем в глобальном пространстве имен.
Квалифицированные имена, или имена, содержащие префикс, например $a = new subnamespace\foo(); или subnamespace\foo::staticmethod();. Если текущее пространство имен — currentnamespace, foo будет разрешено в currentnamespace\subnamespace\foo. Если код, использующий foo, глобальный, т.е. код, не содержащийся ни в каком пространстве имен, foo будет разрешено в subnamespace\foo.~~Ссылка с относительным префиксом пространства имен (аналогично относительному пути); автоматически добавляет пространство имен вызывающего кода в начало.
Полностью квалифицированные имена, или имена, содержащие оператор глобального префикса, например $a = new \currentnamespace\foo(); или \currentnamespace\foo::staticmethod();. В этом случае foo всегда разрешается в буквальное имя в коде, currentnamespace\foo.~~Ссылка с абсолютным префиксом пространства имен (аналогично абсолютному пути). Путь ссылки указан явно, и поиск не требуется.
file1.php
<?php
namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo() {}
class foo
{
static function staticmethod() {}
}
?>
file2.php
<?php
namespace Foo\Bar;
include 'file1.php';
const FOO = 2;
function foo() {}
class foo
{
static function staticmethod() {}
}
/* 非限定名称 */
foo(); // 解析为函数 Foo\Bar\foo
foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod.
echo FOO; // resolves to constant Foo\Bar\FOO
/* 限定名称 */
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
// 以及类的方法 staticmethod
echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
/* 完全限定名称 */
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
?>
Доступ к глобальным классам, функциям и константам из пространства имён:
<?php
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hi'); // 调用全局函数strlen
$b = \INI_ALL; // 访问全局常量 INI_ALL
$c = new \Exception('error'); // 实例化全局类 Exception
?>
Пространства имён и динамические возможности языка
Реализация пространств имён в PHP зависит от динамических возможностей самого языка. Поэтому, если вы хотите преобразовать следующий код в пространства имён, обращайтесь к элементам динамически.
//example.php
<?php
class classname
{
function __construct()
{
echo __METHOD__,"\n";
}
}
function funcname()
{
echo __FUNCTION__,"\n";
}
const constname = "global";
$a = 'classname';
$obj = new $a; // prints classname::__construct
$b = 'funcname';
$b(); // prints funcname
echo constant('constname'), "\n"; // prints global
?>
<?php
namespace namespacename;
class classname
{
function __construct()
{
echo __METHOD__,"\n";
}
}
function funcname()
{
echo __FUNCTION__,"\n";
}
const constname = "namespaced";
include 'example1.php';//全局命名空间和某个命名空间有相同类 函数 和 常量 分别区别访问
$a = 'classname';
$obj = new $a; // prints classname::__construct
$b = 'funcname';
$b(); // prints funcname
echo constant('constname'), "\n"; // prints global
/* note that if using double quotes, "\\namespacename\\classname" must be used */
$a = '\namespacename\classname';
$obj = new $a; // prints namespacename\classname::__construct
$a = 'namespacename\classname';
$obj = new $a; // also prints namespacename\classname::__construct
$b = 'namespacename\funcname';
$b(); // prints namespacename\funcname
$b = '\namespacename\funcname';
$b(); // also prints namespacename\funcname
echo constant('\namespacename\constname'), "\n"; // prints namespaced
echo constant('namespacename\constname'), "\n"; // also prints namespaced
?>
Ключевое слово namespace и константа __NAMESPACE__
<?php namespace MyProject; echo '"', __NAMESPACE__, '"'; // 输出 "MyProject" ?>
<?php echo '"', __NAMESPACE__, '"'; // 输出 "" ?>
Динамическое создание имён с помощью __NAMESPACE__
<?php
namespace MyProject;
function get($classname)
{
$a = __NAMESPACE__ . '\\' . $classname;
return new $a;
}
?>Ключевое слово namespace можно использовать для явного доступа к элементам в текущем пространстве имён или в подпространстве имён. Оно эквивалентно оператору self в классах.
<?php namespace MyProject; use blah\blah as mine; // see "Using namespaces: importing/aliasing" blah\mine(); // calls function blah\blah\mine() namespace\blah\mine(); // calls function MyProject\blah\mine() namespace\func(); // calls function MyProject\func() namespace\sub\func(); // calls function MyProject\sub\func() namespace\cname::method(); // calls static method "method" of class MyProject\cname $a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname $b = namespace\CONSTANT; // assigns value of constant MyProject\CONSTANT to $b ?>
В PHP псевдонимы реализуются с помощью оператора use. Ниже приведён пример, использующий все три возможных способа импорта:
- Импорт/использование псевдонимов с помощью оператора use
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use \ArrayObject; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 ?>
- Несколько операторов use в одной строке
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func ?> <p>导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。</p> <ol> <li>导入和动态名称</li> </ol> <pre> <?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
- Импорт и динамические имена
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
Кроме того, операция импорта влияет только на неквалифицированные и квалифицированные имена. Поскольку полностью квалифицированные имена являются определёнными, импорт на них не влияет.
- Импорт и полностью квалифицированные имена
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instantiates object of class My\Full\Classname $obj = new \Another; // instantiates object of class Another $obj = new Another\thing; // instantiates object of class My\Full\Classname\thing $obj = new \Another\thing; // instantiates object of class Another\thing ?>
Использование пространств имен: возврат к глобальным функциям/константам
В пространстве имен, когда PHP встречает неквалифицированное имя класса, функции или константы, он использует разные стратегии приоритета для разрешения этого имени.
- Имена классов всегда разрешаются в имена в текущем пространстве имен (если имя не найдено, возникает ошибка).Поэтому при обращении к внутренним системным классам или именам классов, не содержащимся в пространстве имен, необходимо использовать полностью квалифицированные имена.
- Для функций и констант, если функция или константа не существует в текущем пространстве имен, PHP возвращается к использованию функции или константы в глобальном пространстве.
<?php
namespace A\B\C;
class Exception extends \Exception {}
$a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象
$b = new \Exception('hi'); // $b 是类 Exception 的一个对象
$c = new ArrayObject; // 致命错误, 找不到 A\B\C\ArrayObject 类
?>
Глобальное пространство
Если пространство имен не определено, все определения классов и функций находятся в глобальном пространстве, так же как и до того, как PHP ввел понятие пространств имен. Префикс имени с \ указывает, что это имя находится в глобальном пространстве, даже если это имя расположено в другом пространстве имен.
<?php
namespace A\B\C;
/* 这个函数是 A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // 调用全局的fopen函数
return $f;
}
?>
Порядок пространств имен (опущено..)
Обработка файлов в PHP
Открытие файлов
$file = fopen($fname, mode) // имя файла, режим открытия
- r Только для чтения. Начинается с начала файла.
- r+ Чтение/запись. Начинается с начала файла.
- w Только запись. Открывает и очищает содержимое файла; если файл не существует, создаёт новый файл.
- w+ Чтение/запись. Открывает и очищает содержимое файла; если файл не существует, создаёт новый файл.
- a Добавление. Открывает и записывает в конец файла; если файл не существует, создаёт новый файл.
- a+ Чтение/добавление. Открывает и записывает в конец файла, сохраняя содержимое файла.
- x Только запись. Создаёт новый файл. Возвращает FALSE и ошибку, если файл уже существует.
- x+ Чтение/запись. Создаёт новый файл. Возвращает FALSE и ошибку, если файл уже существует.
Примечание: Если функция fopen() не может открыть указанный файл, она возвращает 0 (false).
<?php
//打开文件
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
//是否到达文件末尾
while(!feof($file))
{
echo fgets($file). "<br>"; //逐行读取文件
//echo fgetc($file); //逐字符读取
}
//关闭文件
fclose($file);
?>
Функции файловой системы
- basename() Возвращает часть пути, являющуюся именем файла.
- chgrp() Изменяет группу файла.
- chmod() Изменяет режим файла.
- chown() Изменяет владельца файла.
- clearstatcache() Очищает кэш состояния файлов.
- copy() Копирует файл.
- delete() См. unlink() или unset()
- dirname() Возвращает имя каталога из пути.
- disk_free_space() Возвращает доступное пространство в каталоге.
- disk_total_space() Возвращает общую ёмкость диска для каталога.
- diskfreespace() Псевдоним disk_free_space().
- fclose() Закрывает открытый файл.
- feof() Проверяет, находится ли указатель файла в конце файла.
- fflush() Сбрасывает буферизованный вывод в открытый файл.
- fgetc() Возвращает символ из открытого файла.
- fgetcsv() Разбирает строку из открытого файла, проверяя наличие полей CSV.
- fgets() Возвращает строку из открытого файла.
- fgetss() Возвращает строку из открытого файла и отфильтровывает HTML- и PHP-теги.
- file() Читает файл в массив.
- file_exists() Проверяет, существует ли файл или каталог.
- file_get_contents() Читает файл в строку. ~~Получить содержимое файла
- file_put_contents() Записывает строку в файл. ~~Записать содержимое файла
- fileatime() Возвращает время последнего доступа к файлу.
- filectime() Возвращает время последнего изменения файла.
- filegroup() Возвращает ID группы файла.
- fileinode() Возвращает номер inode файла.
- filemtime() Возвращает время последнего изменения содержимого файла.
- fileowner() Возвращает ID пользователя (владельца) файла.
- fileperms() возвращает права доступа к файлу.
- filesize() возвращает размер файла.
- filetype() возвращает тип файла.
- flock() блокирует или разблокирует файл.
- fnmatch() проверяет соответствие имени файла или строки заданному шаблону.
- fopen() открывает файл или URL.
- fpassthru() читает данные из открытого файла до конца файла (EOF) и записывает результат в буфер вывода.
- fputcsv() форматирует строку как CSV и записывает её в открытый файл.
- fputs() — псевдоним fwrite().
- fread() читает открытый файл.
- fscanf() разбирает входные данные в соответствии с заданным форматом.
- fseek() устанавливает позицию в открытом файле.
- fstat() Возвращает информацию об открытом файле.
- ftell() Возвращает текущую позицию в открытом файле.
- ftruncate() Усекает открытый файл до указанной длины.
- fwrite() Записывает данные в открытый файл.
- glob() Возвращает массив, содержащий имена файлов/каталогов, соответствующие заданному шаблону.
- is_dir() Проверяет, является ли файл каталогом.
- is_executable() Проверяет, является ли файл исполняемым.
- is_file() Проверяет, является ли файл обычным файлом.
- is_link() Проверяет, является ли файл ссылкой.
- is_readable() Проверяет, доступен ли файл для чтения.
- is_uploaded_file() Проверяет, был ли файл загружен через HTTP POST.
- is_writable() Проверяет, доступен ли файл для записи.
- is_writeable() Псевдоним is_writable().
- lchgrp() Изменяет групповую принадлежность символической ссылки.
- lchown() Изменяет пользователя-владельца символической ссылки.
- link() Создаёт жёсткую ссылку.
- linkinfo() Возвращает информацию о жёсткой ссылке.
- lstat() Возвращает информацию о файле или символической ссылке.
- mkdir() Создаёт директорию.
- move_uploaded_file() Перемещает загруженный файл в новое место.
- parse_ini_file() Разбирает файл конфигурации.
- parse_ini_string() Разбирает строку конфигурации.
- pathinfo() Возвращает информацию о пути к файлу.
- pclose() Закрывает процесс, открытый popen().
- popen() Открывает процесс.
- readfile() Читает файл и записывает его в буфер вывода.
- readlink() Возвращает цель символической ссылки.
- realpath() Возвращает абсолютный путь.
- realpath_cache_get() Возвращает записи кэша.
- realpath_cache_size() Возвращает размер кэша.
- rename() Переименовывает файл или каталог.
- rewind() Перематывает позицию указателя файла.
- rmdir() Удаляет пустой каталог.
- set_file_buffer() Устанавливает размер буфера открытого файла.
- stat() Возвращает информацию о файле.
- symlink() Создаёт символическую ссылку.
- tempnam() создаёт уникальный временный файл.
- tmpfile() создаёт уникальный временный файл.
- touch() устанавливает время доступа и изменения файла.
- umask() изменяет права доступа к файлу.
- unlink() удаляет файл.
PHP JSON
- json_encode кодирует переменную в формате JSON.
- json_decode декодирует строку в формате JSON и преобразует её в переменную PHP.
- json_last_error возвращает последнюю возникшую ошибку.
string json_encode ( $value [, $options = 0 ] )
Parameters
value: значение, которое нужно закодировать. Эта функция работает только с данными в кодировке UTF-8.
options: битовая маска, состоящая из следующих констант: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT.
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
class Emp {
public $name = "";
public $hobbies = "";
public $birthdate = "";
}
$e = new Emp();
$e->name = "sachin";
$e->hobbies = "sports";
$e->birthdate = date('m/d/Y h:i:s a', "8/5/1974 12:20:03 p");
$e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03"));
echo json_encode($e);
?>
mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
Parameters
json_string: JSON-строка, которую нужно декодировать. Это должны быть данные в кодировке UTF-8.
assoc: Если этот параметр равен TRUE, возвращается массив; если FALSE — возвращается объект.
depth: Целочисленный параметр, задающий глубину рекурсии.
options: Битовая маска. В настоящее время поддерживается только JSON_BIGINT_AS_STRING.
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
Другие руководства
Для более подробных руководств см.:Учебник PHP