搜尋

php 语言总结:基础语法 类型  常量 运算符  流程控制  函数 类与对象 命名空间  超全局变量  垃圾回收机制


1 基本语法
*php标记
echo "Hello world";
// ... more code
echo "Last statement";
// 脚本至此结束,并无 PHP 结束标记

注意:如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。
这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,
而脚本中此时并无输出的意图。

*从html中分离

  This will show if the expression is true.

  Otherwise this will show.


2 类型
*简介
PHP 支持 8 种原始数据类型。

四种标量类型:
boolean(布尔型)
integer(整型)
float(浮点型,也称作 double)
string(字符串)

两种复合类型:
array(数组)
object(对象)

最后是两种特殊类型:
resource(资源)
NULL(无类型)

Note:查看表达式的值和类型,用 var_dump() 函数,获取类型用gettype(),判断是否为某个类型is_type()

*boolean
要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都不区分大小写

当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
空字符串,以及字符串 "0"
不包括任何元素的数组
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

*integer
最大值可以用常量 PHP_INT_MAX 来表示

*float
*string
单引号:不会解析里面的变量
双引号:会解析里面的变量
(如果没有变量那么建议使用单引号这样效率会更高点,因为不用解析里面的内容)
复杂(花括号):只需简单地像在 string 以外的地方那样写出表达式,然后用花括号 { 和 } 把它括起来即可
// 有效,当在字符串中使用多重数组时,一定要用括号将它括起来
echo "This works: {$arr['foo'][3]}";
// 有效
echo "This works: " . $arr['foo'][3];
?>

*array

// 创建一个简单的数组
$array = array(1, 2, 3, 4, 5);
print_r($array);
// 现在删除其中的所有元素,但保持数组本身不变:
foreach ($array as $i => $value) {
    unset($array[$i]);
}
print_r($array);
//删除整个数组unset($array)
?>
*object
要创建一个新的对象 object,使用 new 语句实例化一个类:

class foo
{
    function do_foo()
    {
        echo "Doing foo."; 
    }
}
$bar = new foo;
$bar->do_foo();
?>
*resource
像数据库连接就会返回一个资源
*null
NULL 类型只有一个值,就是不区分大小写的常量 NULL。
在下列情况下一个变量被认为是 NULL:
被赋值为 NULL。
尚未被赋值。
被 unset()。
判断是否为null,使用is_null()

2 变量
*基础
$this 是一个特殊的变量,它不能被赋值
变量默认总是传值赋值,也有引用变量,这就意味着改动新变量将影响到原始的变量
*预定义变量
*变量范围
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内
$a = 1; /* global scope */
function Test()
{
    echo $a; /* reference to local scope variable */
}
Test();
?>
和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。
PHP 中全局变量在函数中使用时必须声明为 global
$a = 1;
$b = 2;
function Sum()
{
    global $a, $b;


    $b = $a + $b;
}
Sum();
echo $b;
?>

态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失
function test()
{
    static $a = 0;
    echo $a;
    $a++;
}
?>

*可变变量
$a = 'hello';
$$a = 'world';
echo "$a ${$a}";
//与以下语句输出完全相同的结果:
echo "$a $hello";
?>
*来自php之外的变量
$_POST $_GET

3 常量
// 合法的常量名
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR", "something more");
// 非法的常量名
define("2FOO",    "something");
// 下面的定义是合法的,但应该避免这样做:(自定义常量不要以__开头)
// 也许将来有一天PHP会定义一个__FOO__的魔术常量
// 这样就会与你的代码相冲突
define("__FOO__", "something");
?>

4 运算符
*优先级
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
?>
*错误运算符
支持一个错误控制运算符:@,该表达式可能产生的任何错误信息都被忽略掉。
*执行运算符
注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回
使用反引号运算符“`”的效果与函数 shell_exec() 相同。
$output = `ls -al`;
echo "
$output
";
?>
结果:将文件目录结构输出来
*字符串连接运算符
有两个字符串(string)运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。
第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!";     // now $a contains "Hello World!"
?>
*数组运算符
$a + $b 联合 $a 和 $b 的联合。
$a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE。
$a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。
$a != $b 不等 如果 $a 不等于 $b 则为 TRUE。
$a $b 不等 如果 $a 不等于 $b 则为 TRUE。
$a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE。

+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>

数组中的单元如果具有相同的键名和值则比较时相等
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>
*类型运算符
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例
class MyClass
{
}

class NotMyClass
{
}
$a = new MyClass;


var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

五:流程控制
*if else
*流程控制代替语法
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。
替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 
endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。


A is equal to 5


*while
while (expr):
    statement
    ...
endwhile;

* for
$people = Array(
        Array('name' => 'Kalle', 'salt' => 856412), 
        Array('name' => 'Pierre', 'salt' => 215863)
        );

for($i = 0, $size = sizeof($people); $i {
    $people[$i]['salt'] = rand(000000, 999999);
}
?>

*foreach
可以很容易地通过在 $value 之前加上 & 来修改数组的元素。
此方法将以引用赋值而不是拷贝一个值。
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
?>
*require 和 include
require 出错是会停止脚本程序,include 会产生警告
require_once和require 基本一样,唯一的区别是唯一区别是 PHP 会检查该文件是否
已经被包含过,如果是则不会再次包含。

六 函数
*可变函数
可变函数类似于可变变量
这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
可变函数可以用来实现包括回调函数,函数表在内的一些用途
function foo() {
    echo "In foo()
\n";
}

function bar($arg = '') {
    echo "In bar(); argument was '$arg'.
\n";
}

// 使用 echo 的包装函数
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // This calls foo()

$func = 'bar';
$func('test');  // This calls bar()

$func = 'echoit';
$func('test');  // This calls echoit()
?>
*匿名函数
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
?>

七 类与对象
*基本概念
$this 是一个到主叫对象的引用(通常是该方法所从属的对象)
*属性
在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。
静态属性则是用 ::(双冒号):self::$property 来访问。更多静态属性与非静态
*类常量
可以把在类中始终保持不变的值定义为常量
class MyClass
{
    const constant = 'constant value';
}
?>
*自动加载类
*Static 静态关键字
声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)
因为静态方法在编译前就被加载了,所有就不能访问非静态方法,因为他们还不存在
*抽象类
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的
*接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
*traits
Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。
Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;
也就是说,应用类的成员不需要继承。
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
*遍历对象
*final关键字
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
*对象复制
*对象比较
当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,
而且两个对象是同一个类的实例,那么这两个对象变量相等。


而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
*后期静态绑定
*对象和引用
一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。
*对象系列化
所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 
序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字

八 命名空间
*命名空间概述
 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
namespace my\name; // 参考 "定义命名空间" 小节

class MyClass {}
function myfunction() {}
const MYCONST = 1;

$a = new MyClass;
$c = new \my\name\MyClass; // 参考 "全局空间" 小节

$a = strlen('hi'); // 参考 "使用命名空间:后备全局函数/常量" 小节

$d = namespace\MYCONST; // 参考 "namespace操作符和__NAMESPACE__常量” 小节

$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // 参考 "命名空间和动态语言特征" 小节
?>

*namespace关键字和__NAMESPACE__常量 
namespace MyProject;
echo '"', __NAMESPACE__, '"'; // 输出 "MyProject"
?>

*全局空间
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,
与 PHP 引入命名空间概念前一样。在名称前加上前缀 \ 表示该名称是
全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。
namespace A\B\C;

/* 这个函数是 A\B\C\fopen */
function fopen() { 
     /* ... */
     $f = \fopen(...); // 调用全局的fopen函数
     return $f;

?>

九 超全局变量
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV

十 垃圾回收机制
* 引用计数器,每个php变量都保存在一个叫“zval”的变量容器中,除了包含变量的类型和值,
还包括两个字节的额外信息,第一个是“is_ref”是一个bool 值 用来标识是否属于引用集合
第二个额外的字节是refcount 用于统计引用次数
$a = "new string";
xdebug_debug_zval('a');
?>
结果:a: (refcount=1, is_ref=0)='new string'
* 如果一个引用计数增加 它将继续呗使用,如果引用计数减少到0,所在变量容器将呗清零(free)





陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

解釋PHP 8.1中的纖維以進行並發。解釋PHP 8.1中的纖維以進行並發。Apr 12, 2025 am 12:05 AM

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區:資源,支持和發展PHP社區:資源,支持和發展Apr 12, 2025 am 12:04 AM

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP與Python:了解差異PHP與Python:了解差異Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

php:死亡還是簡單地適應?php:死亡還是簡單地適應?Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來:改編和創新PHP的未來:改編和創新Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。