php基础知识回顾-1

1.变量作用域

php变量有四种作用域:局部作用域、全局作用域,静态作用域、参数作用域

  • 在局部调用全局变量需要使用 global声明变量
  • 在全局使用局部变量需要使用$GLOBALS['变量名'] 注册全局变量
  • 如果在方法中需要保存某变量的值可以使用静态变量static声明
  • 调用方法是传参可以多但是不能少

超级全局变量

  • $GLOBALS:全部变量的全局组合数组。变量的名字就是数组的键。
  • $_SERVER: 包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。
  • $_REQUEST: 用于收集HTML表单提交的数据。
  • $_POST: 收集表单数据,在HTML form标签的指定该属性:"method="post"
  • $_GET: 收集表单数据,在HTML form标签的指定该属性:"method="get"
  • $_COOKIE:cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
  • $_FILES:上传文件时,用于服务器端需要获得该文件的相关信息。
  • $_ENV:包含服务器端环境变量的数组。
  • $_SESSION: session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

2.打印输出

  • echo:可以输出一个或多个字符串,没有返回值。
  • print:只允许输出一个字符串,有返回值 1 。
  • print_r:可以打印标量和复合数据类型,可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值
  • var_dump():输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。

提示:echo和print是语句不是函数,echo 输出的速度比 print 快, 不能输出数组和对象,只能打印简单类型(如int,string)。print_r和var_dump()是函数

echo PHP_EOL;// PHP_EOL是换行符

3.数据类型

标量数据类型:String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型)
复合数据类型: Array(数组), Object(对象)
特殊数据类型:resource(资源), NULL(空值)

常量:整个脚本中都可以使用。可使用 define() 函数设置常量。
define(string constant_name, mixed value, case_sensitive = true)

4.运算符

算数运算符:+(加),-(减),*(乘),/(除),%(模,除法的余数),-x(取反) ,.(并置,拼接)
赋值运算符:=(赋值),+=(加等),-=(减等),*=(乘等),/=(除等), %=(模等),.=(拼接后赋值)

x = x + y;  // +可替换为其他算数运算符

递增/递减运算符:x++(后递增),++x(预递增),x--(后递减),--x(预递减)
比较运算符:==(等于),===(绝对等于),!=(不等于),<> (不等于),!==(绝对不等于),>(大于),<(小于),>=(大于等于),<=(小于等于)
逻辑运算符:and(与),or(或),xor(异或),&&(与),||(或),!(非)
数组运算符:+(数组集合),==(相等),=== (恒等),!=(不相等),<>(不相等),!== (不恒等)
三元运算符:条件?是 :否;

(expr1) ? (expr2) : (expr3) 
// 自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
// 在 PHP7+ 版本多了一个 NULL 合并运算符 ??,实例如下:
$username = $_GET['user'] ?? 'nobody';// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';// 类似的三元运算符

组合比较符(PHP7+): <=>(也称之为太空船操作符)

$c = $a <=> $b;
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。

5.八大魔术变量

  • __LINE__: 文件中的当前行号。
  • __FILE__:文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
  • __DIR__:文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
  • __FUNCTION__:函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
  • __CLASS__ :类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
  • __METHOD__:类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
  • __NAMESPACE__:当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
  • __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 'Hello ';
    }
}
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
class MyHelloWorld extends Base {
    use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello(); // Hello World!
?>

6.魔术方法

以下是几个常用的魔术方法:
__construct()和__destruct():构造函数和析构函数,类初始化时和类销毁时调用。

__get()和__set():访问和设置类不存在的成员变量时调用的。

__isset()和__unset():当使用isset()和unset()函数调用时判断或销毁变量时调用的。

__call():当调用类中不存在的方法。

__clone():使用clone复制对象时调用。

__tosring():当类变成字符串时调用。

__sleep()和__wakeup():序列化类的时候调用的。当序列化对象时,php将试图在序列动作之前调用该对象的成员函数__sleep(), 当使用unserialize() 恢复对象时, 将调用__wakeup()。

__debuginfo():打印所调试信息时调用。

7.命名空间

PHP 命名空间(namespace)是在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 代码包括空白符都不能出现在命名空间的声明之前。
命名空间使用:

  • 非限定名称,或不包含前缀的类名称,例如 $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。带绝对命名空间前缀的引用(类似绝对路径) 引用路径已明确 不用查找

<?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 对象
?>

参考链接:https://www.runoob.com/w3cnote/php-basic-summary.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容