목차
我的第一个 PHP 页面
PHP is fun!
백엔드 개발 PHP 튜토리얼 PHP에 대한 기본 지식 요약. 이를 학습한 후에는 직접 PHP 수석 프로그래머로 승진할 수 있습니다.

PHP에 대한 기본 지식 요약. 이를 학습한 후에는 직접 PHP 수석 프로그래머로 승진할 수 있습니다.

Jan 29, 2017 pm 08:54 PM

PHP는 PHP: Hypertext Preprocessor의 약자

PHP 파일에는 텍스트, HTML, JavaScript 코드 및 PHP 코드가 포함될 수 있습니다.

PHP 코드는 서버에서 실행되며 결과는 순수 HTML입니다. 양식은 브라우저로 반환됩니다.

PHP 파일의 기본 파일 확장자는 ".php"입니다.

PHP에 대한 기본 지식 요약. 이를 학습한 후에는 직접 PHP 수석 프로그래머로 승진할 수 있습니다.

PHP가 할 수 있는 작업 do

PHP는 동적 페이지 콘텐츠를 생성할 수 있습니다

PHP는 서버에서 파일을 생성, 열기, 읽기, 쓰기, 닫기가 가능합니다

PHP는 양식을 수집할 수 있습니다 데이터

PHP는 쿠키를 보내고 받을 수 있습니다

PHP는 데이터베이스의 데이터를 추가, 삭제, 수정할 수 있습니다

PHP는 사용자가 다음을 제한할 수 있습니다. 데이터베이스 액세스 웹사이트의 일부 페이지

PHP는 데이터를 암호화할 수 있습니다

설치

서버가 PHP를 지원하지 않는 경우 다음을 수행해야 합니다.

웹 서버 설치

PHP 설치

MySQL과 같은 데이터베이스 설치
공식 PHP 웹사이트(PHP.net)에 PHP 설치 지침이 있습니다: http:/ /php.net /manual/en/install.php

통합 개발 환경에서는 WAMP를 권장합니다: http://www.php.cn/xiazai/

PHP 기본 구문

PHP 스크립트는 문서의 어느 곳에나 배치할 수 있습니다.

PHP 스크립트는 로 끝납니다:

<!DOCTYPE html>
<html>
    <body>
        <h1 id="我的第一个-nbsp-PHP-nbsp-页面">我的第一个 PHP 页面</h1>
        <?php
                echo "Hello World!";// 这是一行注释/*
            这是
            多行
            注释
                */
           ?>
      </body>
 </html>
로그인 후 복사

PHP의 모든 코드 줄은 세미콜론으로 끝나야 합니다.

두 가지 유형의 기본 브라우저 출력 텍스트에 대한 지침: 에코 및 인쇄.

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";
?>
로그인 후 복사

함수 내부에서 함수 외부에 정의된 전역 변수를 호출하려면 변수 앞에 와야 합니다. function 전역 키워드 추가:

<?php
$x=5;
$y=10;

function myTest()
{
	global $x,$y;
	$y=$x+$y;
}

myTest();
echo $y; // 输出 15
?>
로그인 후 복사

PHP는 모든 전역 변수를 $GLOBALS[index]라는 배열에 저장합니다. index는 변수의 이름을 담고 있습니다. 이 배열은 함수 내에서 액세스하거나 전역 변수를 업데이트하는 데 직접 사용할 수 있습니다.

<?php
$x=5;
$y=10;

function myTest()
{
	$GLOBALS[&#39;y&#39;]=$GLOBALS[&#39;x&#39;]+$GLOBALS[&#39;y&#39;];
} 

myTest();
echo $y;
?>
로그인 후 복사

정적 범위

함수가 완료되면 일반적으로 모든 변수가 삭제됩니다. 하지만 지역 변수를 삭제하지 않으려는 경우에는 정적 키워드

<?php

function myTest()
{
	static $x=0;
	echo $x;
	$x++;
}

myTest();
myTest();
myTest();

?>
로그인 후 복사

매개변수 범위

를 사용하면 됩니다. 매개변수는 호출을 통해 함수에 값이 전달되는 지역 변수입니다. 암호.

매개변수는 함수 선언의 일부로 매개변수 목록에 선언됩니다.

<?php

function myTest($x)
{
	echo $x;
}

myTest(5);

?>
로그인 후 복사

PHP echo 및 print 문

echo - 하나 이상의 문자열을 출력할 수 있습니다

print - 하나의 문자열만 출력 가능하며, 반환값은 항상 1입니다

提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
echo 和 print 都是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo() print print()。

<?php
echo "<h2 id="PHP-nbsp-is-nbsp-fun">PHP is fun!</h2>";
echo "Hello world!<br>";
echo "I&#39;m about to learn PHP!<br>";
echo "This", " string", " was", " made", " with multiple parameters.";

print "<h2 id="PHP-nbsp-is-nbsp-fun">PHP is fun!</h2>";
print "Hello world!<br>";
print "I&#39;m about to learn PHP!";

?>
로그인 후 복사

下面的实例演示了如何使用 echo 命令输出变量和字符串:

<?php
$txt1="Learn PHP";
$txt2="w3cschool.cc";
$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="w3cschool.cc";
$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(空值)。

字符串
你可以将任何文本放在单引号和双引号中:

<?php 
$x = "Hello world!";
echo $x;
echo "<br>"; 
$x = &#39;Hello world!&#39;; //单引号 包括字符串字面量 双引号包含的字符串 可包含变量
echo $x;
?>
로그인 후 복사

整型
在以下实例中我们将测试不同的数字。 PHP var_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);
?>
로그인 후 복사

浮点型

浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。

<?php 
$x = 10.365;
var_dump($x);
echo "<br>"; 
$x = 2.4e3;
var_dump($x);
echo "<br>"; 
$x = 8E-5;
var_dump($x);
?>
로그인 후 복사

布尔型

布尔型可以是 TRUE 或 FALSE。

数组

数组可以在一个变量中存储多个值

<?php 
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
로그인 후 복사

对象

在 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 php.cn!":

<?php
define("GREETING", "Welcome to php.cn!");
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[&#39;Peter&#39;] . " 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() - 根据关联数组的键,对数组进行降序排列

<?php //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中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_COOKIE

$_FILES

$_ENV

$_SESSION

$GLOBAL 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

<?php 
$x = 75; 
$y = 25;
 
function addition() 
{ 
	$GLOBALS[&#39;z&#39;] = $GLOBALS[&#39;x&#39;] + $GLOBALS[&#39;y&#39;]; 
}
 
addition(); 
echo $z; 
?>
로그인 후 복사

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;

<?php 
echo $_SERVER[&#39;PHP_SELF&#39;]; // /try/demo_source/demo_global_server.php
echo "<br>";
echo $_SERVER[&#39;SERVER_NAME&#39;]; // www.php.cn 
echo "<br>";
echo $_SERVER[&#39;HTTP_HOST&#39;]; // www.php.cn
echo "<br>";
echo $_SERVER[&#39;HTTP_REFERER&#39;]; //来由
echo "<br>";
echo $_SERVER[&#39;HTTP_USER_AGENT&#39;]; //浏览器
echo "<br>";
echo $_SERVER[&#39;SCRIPT_NAME&#39;]; // /try/demo_source/demo_global_server.php

//另外$_SERVER对象还包括 SERVER_ADDR, SERVER_PROTOCOL ,REQUEST_METHOD..等属性

?>
로그인 후 복사

$_REQUEST 用于收集HTML表单提交的数据。


Name:

<?php 
$name = $_REQUEST[&#39;fname&#39;]; 
echo $name; 
?>
로그인 후 복사

$_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"

Name:

<?php 
$name = $_POST[&#39;fname&#39;]; 
echo $name; 
?>
로그인 후 복사


$_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

$_GET 也可以收集URL中发送的数据。


Test $GET



//test_get.php


<?php 
echo "Study " . $_GET[&#39;subject&#39;] . " at " . $_GET[&#39;web&#39;];
?>
로그인 후 복사


PHP 函数

PHP 的真正威力源自于它的函数。

在 PHP 中,提供了超过 1000 个内建的函数。

<?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&#39;s name is ";
//函数返回值
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
로그인 후 복사


魔术变量

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

_LINE__

文件中的当前行号。

FILE

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

DIR

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

FUNCTION

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

<?php
function test() {
echo  &#39;函数名为:&#39; . __FUNCTION__ ;
}
test();
?>
로그인 후 복사

CLASS 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。

<?php
class test {
function _print() {
echo &#39;类名为:&#39;  . __CLASS__ . "<br>";
echo  &#39;函数名为:&#39; . __FUNCTION__ ;
}
}
$t = new test();
$t->_print();
?>
로그인 후 복사

TRAIT Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

<?php
class Base {
    public function sayHello() {
        echo &#39;Hello &#39;;
    }
}
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo &#39;World!&#39;;
    }
}
class MyHelloWorld extends Base {
    use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
로그인 후 복사

METHOD 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)

<?php
function test() {
echo  &#39;函数名为:&#39; . __METHOD__ ;
}
test();
?>
로그인 후 복사

NAMESPACE 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

<?php
namespace MyProject;
echo &#39;命名空间为:"&#39;, __NAMESPACE__, &#39;"&#39;; // 输出 "MyProject"
?>
로그인 후 복사

命名空间

PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物。 不过在PHP当中还是有着相当重要的意义。

PHP 命名空间可以解决以下两类问题:

用户代码与PHP内部的类/函数/常量之间的名字冲突。

创建别名(或简短)的名称,提高源代码的可读性。

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间

< ?php  
// 定义代码在 &#39;MyProject&#39; 命名空间中  
namespace MyProject;  
 
// ... 代码 ...  
//也可以在同一个文件中定义不同的命名空间代码
namespace MyProject1;  
// MyProject1 命名空间中的PHP代码  
 
namespace MyProject2;  
// MyProject2 命名空间中的PHP代码    
 
// 另一种语法
namespace MyProject3 {  
 // MyProject3 命名空间中的PHP代码    
}  
?>
로그인 후 복사

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。

<?php
declare(encoding=&#39;UTF-8&#39;); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
로그인 후 복사

以下代码会出现语法错误:

<?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 总是被解析为代码中的文字名(literal name)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 &#39;file1.php&#39;;
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(&#39;hi&#39;); // 调用全局函数strlen
$b = \INI_ALL; // 访问全局常量 INI_ALL
$c = new \Exception(&#39;error&#39;); // 实例化全局类 Exception
?>
로그인 후 복사

命名空间和动态语言特征

PHP 命名空间的实现受到其语言自身的动态特征的影响。因此,如果要将下面的代码转换到命名空间中,动态访问元素。

//example.php

<?php
class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "global";
$a = &#39;classname&#39;;
$obj = new $a; // prints classname::__construct
$b = &#39;funcname&#39;;
$b(); // prints funcname
echo constant(&#39;constname&#39;), "\n"; // prints global
?>
<?php
namespace namespacename;
class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "namespaced";
include &#39;example1.php&#39;;//全局命名空间和某个命名空间有相同类 函数 和 常量 分别区别访问
$a = &#39;classname&#39;;
$obj = new $a; // prints classname::__construct
$b = &#39;funcname&#39;;
$b(); // prints funcname
echo constant(&#39;constname&#39;), "\n"; // prints global
/* note that if using double quotes, "\\namespacename\\classname" must be used */
$a = &#39;\namespacename\classname&#39;;
$obj = new $a; // prints namespacename\classname::__construct
$a = &#39;namespacename\classname&#39;;
$obj = new $a; // also prints namespacename\classname::__construct
$b = &#39;namespacename\funcname&#39;;
$b(); // prints namespacename\funcname
$b = &#39;\namespacename\funcname&#39;;
$b(); // also prints namespacename\funcname
echo constant(&#39;\namespacename\constname&#39;), "\n"; // prints namespaced
echo constant(&#39;namespacename\constname&#39;), "\n"; // also prints namespaced
?>
로그인 후 복사

namespace关键字和__NAMESPACE__常量

<?php
namespace MyProject;
echo &#39;"&#39;, __NAMESPACE__, &#39;"&#39;; // 输出 "MyProject"
?>
<?php
echo &#39;"&#39;, __NAMESPACE__, &#39;"&#39;; // 输出 ""
?>
로그인 후 복사

使用__NAMESPACE__动态创建名称

<?php
namespace MyProject;
function get($classname)
{
    $a = __NAMESPACE__ . &#39;\\&#39; . $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
?>
로그인 후 복사

导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。

  1. 导入和动态名称

</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // 实例化一个 My\Full\Classname 对象
$a = &#39;Another&#39;;
$obj = new $a;      // 实际化一个 Another 对象
?>
로그인 후 복사
로그인 후 복사

导入和动态名称</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = &#39;Another&#39;; $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 会退而使用全局空间中的函数或常量。

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);
?>
로그인 후 복사

Filesystem 函数

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 ] )

参数

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(&#39;a&#39; => 1, &#39;b&#39; => 2, &#39;c&#39; => 3, &#39;d&#39; => 4, &#39;e&#39; => 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(&#39;m/d/Y h:i:s a&#39;, "8/5/1974 12:20:03 p");
   $e->birthdate = date(&#39;m/d/Y h:i:s a&#39;, strtotime("8/5/1974 12:20:03"));
   echo json_encode($e);
?>
로그인 후 복사

mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])

参数

json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数据

assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。

depth: 整数类型的参数,它指定递归深度

options: 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。

<?php
   $json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
   var_dump(json_decode($json));
   var_dump(json_decode($json, true));
?>
로그인 후 복사


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

프론트엔드 개발자가 PHP에 대해 알아야 할 사항 프론트엔드 개발자가 PHP에 대해 알아야 할 사항 Mar 29, 2024 pm 03:09 PM

프론트엔드 개발자로서 PHP를 이해하는 것은 매우 필요합니다. PHP는 백엔드 개발 언어이지만 일정량의 PHP 지식을 습득하면 프런트엔드 개발자가 전체 웹 개발 프로세스를 더 잘 이해하고 작업 효율성을 높이며 백엔드 개발자와 더 효과적으로 협업하는 데 도움이 될 수 있습니다. 이 기사에서는 프런트엔드 개발자가 PHP에 대해 알아야 할 몇 가지 사항에 대해 논의하고 구체적인 코드 예제를 제공합니다. PHP란 무엇입니까? PHP(HypertextPreprocessor)는 서버입니다.

PHP 초보자 가이드 PHP 초보자 가이드 May 25, 2023 am 08:03 AM

PHP는 널리 사용되는 프런트엔드 프로그래밍 언어로, 강력하고 배우고 사용하기 쉬우며 웹사이트 개발 및 유지 관리에 널리 사용됩니다. 초보자의 경우 PHP를 시작하려면 일정량의 학습과 숙달이 필요합니다. 다음은 PHP 초보자를 위한 몇 가지 가이드입니다. 1. 기본 개념 배우기 PHP를 배우기 전에 몇 가지 기본 개념을 이해해야 합니다. PHP는 웹 서버에 명령을 내리는 스크립트 언어입니다. 간단히 말해서, PHP를 사용하여 HTML 코드를 생성하고 이를 브라우저로 보내 최종적으로 웹 페이지에 렌더링할 수 있습니다.

PHP 작성 테스트의 기초가 취약합니까? 이런 공부 방법을 시도해 보세요! PHP 작성 테스트의 기초가 취약합니까? 이런 공부 방법을 시도해 보세요! Mar 01, 2024 pm 01:39 PM

PHP는 웹 개발에 널리 사용되는 스크립트 언어로서 많은 인터넷 기업이 기술 인재를 채용하는 데 필요한 기술 중 하나가 되었습니다. 그러나 이제 막 PHP를 시작하거나 기초가 약한 일부 학습자의 경우 PHP를 배우는데 어려움을 겪을 수 있습니다. PHP 필기 시험에 직면할 때 기본 기술을 어떻게 더 잘 향상시킬 수 있습니까? 다음으로, 모든 사람이 PHP에 대한 기본 지식과 기술을 향상시킬 수 있도록 몇 가지 학습 방법을 소개하겠습니다. 1. PHP 공식 문서를 읽는 습관을 기르세요. PHP 공식 문서는 학습입니다.

초보자에게 필수: PHP 기본 오류 및 해결 방법 초보자에게 필수: PHP 기본 오류 및 해결 방법 May 11, 2023 am 08:28 AM

PHP를 배우는 과정에서 초보자들은 종종 다양한 오류에 직면하게 됩니다. 이는 자연스러운 학습 과정이지만, 많은 초보자는 실수를 부적절하게 처리하여 인내심을 잃는 경우가 많습니다. 이 기사에서는 초보자가 PHP를 보다 쉽게 ​​시작할 수 있도록 기본적인 PHP 오류 및 해결 방법을 소개합니다. 1. 구문 오류 1.1 세미콜론 누락 PHP에서 명령문은 세미콜론으로 끝나야 합니다. 실수로 세미콜론을 생략하면 오류가 보고됩니다. 예를 들어, 다음 코드는 오류를 발생시킵니다: &lt;?phpecho"He

PHP 가치 개요: PHP의 중요한 개념을 이해합니다. PHP 가치 개요: PHP의 중요한 개념을 이해합니다. Mar 22, 2024 pm 03:09 PM

PHP 값 개요: PHP의 중요한 개념을 이해하려면 특정 코드 예제가 필요합니다. PHP(Hypertext Preprocessor)는 웹 개발에 널리 사용되는 스크립트 언어로, HTML에 내장되거나 독립형 스크립트로 실행될 수 있습니다. 웹 개발에서 효율적이고 유지 관리 가능한 코드를 작성하려면 PHP의 몇 가지 중요한 개념을 이해하는 것이 중요합니다. 이 기사에서는 PHP의 몇 가지 중요한 개념을 소개하고 독자의 이해를 돕기 위해 구체적인 코드 예제를 제공합니다. 변수 변경

PHP 기본 튜토리얼 배열 기능 PHP 기본 튜토리얼 배열 기능 Jun 20, 2023 pm 01:39 PM

배열 함수는 PHP에서 가장 일반적으로 사용되는 함수 중 하나로 배열을 생성, 작동 및 관리하는 데 사용할 수 있습니다. 애플리케이션을 개발할 때 배열 기능을 사용하면 개발 효율성을 크게 향상시킬 수 있습니다. 이 문서에서는 모든 사람이 배열 함수를 더 잘 이해하고 마스터할 수 있도록 PHP 배열 함수의 몇 가지 기본 사용법과 예제를 소개합니다. 1. 배열 생성 및 초기화 PHP에서 배열은 다음과 같은 방법으로 생성할 수 있습니다. //array() 함수를 통해 배열 생성 $arr=array("a",&q

PHP 문서 읽기를 위한 10가지 팁 PHP 문서 읽기를 위한 10가지 팁 May 24, 2023 pm 09:21 PM

PHP는 웹 개발에 널리 사용되는 매우 인기 있는 오픈 소스 서버 측 스크립팅 언어입니다. 훌륭한 PHP 프로그래머가 되려면 공식 문서를 읽는 것이 필수적입니다. 초보자이든 숙련된 개발자이든 이 팁은 PHP 문서를 보다 효과적으로 읽는 데 도움이 될 것입니다. 문서 구조 이해 PHP 공식 문서는 매뉴얼, 참조 매뉴얼, FAQ, 확장 라이브러리 문서 등을 포함하여 여러 부분으로 나누어져 있습니다. 읽기를 시작하기 전에 문서의 구조를 이해하고 필요한 부분을 찾으십시오. 검색 기능 사용하기 PHP 문서

드림위버 웹사이트 구축에 필요: PHP의 몇 가지 주요 지식 포인트를 숙지하세요 드림위버 웹사이트 구축에 필요: PHP의 몇 가지 주요 지식 포인트를 숙지하세요 Mar 27, 2024 pm 03:09 PM

오늘날 정보가 폭발적으로 증가하는 인터넷 시대에 웹 사이트는 모든 계층에서 표시 및 홍보를 위한 중요한 방법이 되었으며, 가장 널리 사용되는 서버 측 스크립팅 언어인 PHP는 의심할 여지 없이 많은 웹 사이트 개발자에게 필수적인 기술 중 하나입니다. PHP에 능숙해지기 위해서는 먼저 몇 가지 핵심 지식을 습득하고 구체적인 코드 예제를 통해 이해를 심화해야 합니다. 1. PHP 기본 구문 PHP의 기본 구문은 변수, 데이터 유형, 연산자, 조건문, 루프문 등을 포함하여 대부분의 프로그래밍 언어와 유사합니다. 다음은 간단한 예입니다.

See all articles