• PHP расшифровывается как PHP: Hypertext Preprocessor
  • Файлы PHP могут содержать текст, HTML, код JavaScript и код PHP
  • Код PHP выполняется на сервере, а результат возвращается в браузер в виде обычного HTML
  • Расширение файлов PHP по умолчанию — ".php"
PHP 基础知识总结

Что умеет PHP?

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

Установка

Если ваш сервер не поддерживает PHP, вы должны:

  1. Установить веб-сервер
  2. Установить PHP
  3. Установить базу данных, например 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 можно ссылаться тремя способами:

  1. Неквалифицированные имена, или имена классов без префикса, например $a=new foo(); или foo::staticmethod();. Если текущее пространство имен — currentnamespace, foo будет разрешено в currentnamespace\foo. Если код, использующий foo, глобальный, т.е. код, не содержащийся ни в каком пространстве имен, foo будет разрешено в foo. Предупреждение: если функция или константа в пространстве имен не определена, неквалифицированное имя функции или имя константы будет разрешено в глобальное имя функции или имя константы.~~Ссылка без префикса пространства имен: по умолчанию ищет в текущем пространстве имен, затем в глобальном пространстве имен.

  2. Квалифицированные имена, или имена, содержащие префикс, например $a = new subnamespace\foo(); или subnamespace\foo::staticmethod();. Если текущее пространство имен — currentnamespace, foo будет разрешено в currentnamespace\subnamespace\foo. Если код, использующий foo, глобальный, т.е. код, не содержащийся ни в каком пространстве имен, foo будет разрешено в subnamespace\foo.~~Ссылка с относительным префиксом пространства имен (аналогично относительному пути); автоматически добавляет пространство имен вызывающего кода в начало.

  3. Полностью квалифицированные имена, или имена, содержащие оператор глобального префикса, например $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. Ниже приведён пример, использующий все три возможных способа импорта:

  1. Импорт/использование псевдонимов с помощью оператора 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 对象
?>
  1. Несколько операторов 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 对象
?>
  1. Импорт и динамические имена
<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // 实例化一个 My\Full\Classname 对象
$a = 'Another';
$obj = new $a;      // 实际化一个 Another 对象
?>

Кроме того, операция импорта влияет только на неквалифицированные и квалифицированные имена. Поскольку полностью квалифицированные имена являются определёнными, импорт на них не влияет.

  1. Импорт и полностью квалифицированные имена
<?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