PHP Day4:基础回顾与加强

多维数组

  • 多维数组指的是包含一个或多个数组的数组。
  • PHP 能理解两、三、四或五级甚至更多级的多维数组。不过,超过三级深的数组对于大多数人难于管理。
  • 注释:数组的维度指示您需要选择元素的索引数。
    • 对于二维数组,您需要两个索引来选取元素
    • 对于三维数组,您需要三个索引来选取元素
示例代码
<?php
$cars = array
   (
   array("Volvo",33,20),
   array("BMW",17,15),
   array("Saab",5,2),
   array("Land Rover",15,11)
   );
现在这个两维数组包含了四个数组,并且它有两个索引(下标):行和列。
如需访问 $cars 数组中的元素,我们必须使用两个索引(行和列):
echo $cars[0][0].": 库存:".$cars[0][1].", 已售:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 已售:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 已售:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 已售:".$cars[3][2].".<br>";
?>

运行结果:
Volvo: 库存:33, 已售:20.
BMW: 库存:17, 已售:15.
Saab: 库存:5, 已售:2.
Land Rover: 库存:15, 已售:11.
FOR循环的代码
<?php
$cars = array
   (
   array("Volvo",33,20),
   array("BMW",17,15),
   array("Saab",5,2),
   array("Land Rover",15,11)
   );
   
for ($row = 0; $row <  4; $row++) {
   echo "<p><b>行数 $row</b></p>";
   echo "<ul>";
   for ($col = 0; $col <  3; $col++) {
     echo "<li>".$cars[$row][$col]."</li>";
   }
   echo "</ul>";
}
?>
我们也可以在 For 循环中使用另一个 For 循环,来获得 $cars 数组中的元素(我们仍需使用两个索引):
行数 0

Volvo
33
20
行数 1

BMW
17
15
行数 2

Saab
5
2
行数 3

Land Rover
15
11

Directory函数

  1. chdir() 改变当前的目录。
  2. chroot() 改变根目录。
  3. closedir() 关闭目录句柄。
  4. dir() 返回 Directory 类的实例。
  5. getcwd() 返回当前工作目录。
  6. opendir() 打开目录句柄。
  7. readdir() 返回目录句柄中的条目。
  8. rewinddir() 重置目录句柄。
  9. scandir() 返回指定目录中的文件和目录的数组。、

Filesystem函数

Filesystem函数允许您访问和操作文件系统。

  1. unix和Windows兼容性问题
  • 当在 Unix 平台上规定路径时,正斜杠 (/) 用作目录分隔符。而在 Windows 平台上,正斜杠 (/) 和反斜杠 (\ ) 均可使用。

使用中查手册的key函数

  1. php filter:PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。
  2. php ftp:通过文件传输协议(FTP)提供对文件服务器的客户端访问。
  3. php http:允许您在其他输出被发送之前,对由web服务器发送到浏览器的信息进行操作。
  4. php libxml:Libxml 函数和常量与 SimpleXML、XSLT 以及 DOM 函数一起使用。
  5. php mail:mail() 函数允许您从脚本中直接发送电子邮件。
  6. php math:Math 函数能处理 integer 和 float 范围内的值。
  7. php 杂项函数:我们把不属于其他类别的函数归纳到杂项函数类别。
  8. php pdo:php数据对象(pdo)扩展为php访问数据库定义了一个轻量级的一致接口。
  9. php simplexml:提供了一种获取xml元素名称和文本的简单方式。
  10. php string:PHP String 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
  11. php xml parse:XML 函数允许您解析 XML 文档,但无法对其进行验证。
  12. php zip file:Zip File 函数允许您读取压缩文件。
  13. php time zones:支持的时区。
  14. php 图像处理:PHP 提供了丰富的图像处理函数。
  15. php restful(Representational State Transfer):一种架构约束条件和原则。

PHP Restful

REST(英文:Representational State Transfer,简称REST) ,指的是一组架构约束条件和原则。

  1. 符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:
  • 直观简短的资源地址:URI,比如:http://example.com/resources/
  • 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAM等。
  • 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

基本语法回顾

  1. static:让局部变量不被删除。(在php中,当一个函数执行完,函数中的变量通常都会被删除)
  • 注意:将static定义在函数内部
  1. 参数作用域:参数是通过调用代码将值传递给函数的局部变量,作为函数声明的一部分。
<?php

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

myTest(5);

?>
  1. echo语句
  • echo和Print输出字符串都可以包含html标签
  • echo和Print的区别是
    • echo可以输出一个或者多个字符串,没有返回值
    • print只允许输出一个字符串,返回值是1
  1. PHP对象
  • 对象数据类型也可以用于存储数据。
  • 在php中,对象必须声明:
    1. 必须用class关键字声明类对象。类是可以包含属性和方法的结构。
    2. 在类中定义数据类型,在实例化的类中使用数据类型。
<?php
class Car
{
  var $color;
  function Car($color="green") {
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>
  • PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
  1. NULL值
  • NULL值表示变量没有值,NULL是数据类型为NULL的值。
  • 常用场景1:设置变量值为 NULL 来清空变量数据:
  • 常用场景2:NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
  1. php常量
  • 常量名不需要加$修饰符,用define(x,x,x)关键字定义常量。
  • 注意:常量在整个脚本中都可以被使用
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
  • name:必选参数,常量名称,即标志符。
  • value:必选参数,常量的值。
  • case_insensitive :可选参数,如果设置为TRUE,不区分大小写。默认是大小写敏感的。
  1. 运算符
  • php7+新增的整除运算符:intdiv():
<?php
var_dump(intdiv(10, 3));
?>
输出结果是int(3)
  • a.=b的意思是:a = a.b;
$x="Hello";
$x .= " world!";
echo $x; // outputs Hello world! 
  • php递增递减运算符:++x x++,–x,x–:
  1. ++x:x先加1,再返回x
  2. x++:先返回x,再加1
  3. –x,x–同理
<?php
$x=10; 
echo ++$x; // 输出11

$y=10; 
echo $y++; // 输出10

$z=5;
echo --$z; // 输出4

$i=5;
echo $i--; // 输出5
?>
  • php比较运算符
  1. x === y 恒等于 如果 x 等于 y,且它们类型相同,则返回 true 5===”5″ 返回 false
  2. x <> y(或者x != y) 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
  3. x !== y 不恒等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!==”5″ 返回 true
  • php逻辑运算符
  1. x or y 或 如果 x 和 y 至少有一个为 true,则返回 true
x=6 
y=3 
(x==6 or y==5) 返回 true
  1. x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true
x=6
y=3 
(x==6 xor y==3) 返回 false
  • php数组运算符
  1. x == y 相等: 如果 x 和 y 具有相同的键/值对,则返回 true
  2. x === y 恒等: 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
  3. x !== y 不恒等 如果 x 不等于 y,则返回 true
  • 三元运算符
(expr1) ? (expr2) : (expr3) 
  1. expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
  2. 自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
    示例代码:
<?php
$test = '菜鸟教程';
// 普通写法
$username = isset($test) ? $test : 'nobody';
echo $username, PHP_EOL;

// PHP 5.3+ 版本写法
$username = $test ?: 'nobody';
echo $username, PHP_EOL;
?>
  1. 注意:PHP_EOL 是一个换行符,兼容更大平台。比如Windows下的/n/r
  • NULL合并运算符 (php7新增)
<?php
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
  • 组合比较符(php7+新增)
  1. 语法是这样的:$c = $a <=> $b;
echo 2 <=> 1; // 1
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1

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

数组 array()

  1. 在 PHP 中,有三种类型的数组:
  • 数值数组 – 带有数字 ID 键的数组
  • 关联数组 – 带有指定的键的数组,每个键关联一个值
  • 多维数组 – 包含一个或多个数组的数组
<?php
//php的数值数组
$test = array("who","are","you");
$alength = count($test);
for($x=0;$x<$alength;$x++){
echo $test[$x];
    echo "<br>";
}
打印结果:
who
are
you

//php的关联数组
$connectArray = array('first'=>'maiyatian',
    'second'=>'huawei',
    'third'=>666);
echo $connectArray['first'].'-'.$connectArray['second'].'@'.$connectArray['third'].'<br>';
打印结果:
maiyatian-huawei@666

//遍历关联数组
$age = array('jason'=>12,
    'mike'=>34,
    'jenny'=>23);
foreach ($age as $x=>$x_value){
    echo 'key:'.$x.' Value:'.$x_value.'<br>';
}

打印结果:
key:jason Value:12
key:mike Value:34
key:jenny Value:23
?>
  1. 数组排序
    数组中的元素可以按字母或数字顺序进行降序或升序排列。
  • sort() – 对数组进行升序排列
  • rsort() – 对数组进行降序排列
  • asort() – 根据关联数组的值,对数组进行升序排列
  • ksort() – 根据关联数组的键,对数组进行升序排列
  • arsort() – 根据关联数组的值,对数组进行降序排列
  • krsort() – 根据关联数组的键,对数组进行降序排列

PHP超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION
详解
  1. $GLOBALS
  • $GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
  • $GLOBALS是包含了全部变量的全局组合数组。变量的名字就是数组的键(KEY)\
$x=25;
$y=75;
function submit(){
$GLOBALS['z'] = $GLOBALS['x']+$GLOBALS['y'];
}
submit();
echo $z;

注意:

  • $GLOBALS[”]中括号里面需要用引号”来指定全局中定义的变量
  • 实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。
  1. $_SERVER
  • 也是一个数组:包含了诸如头信息(header)、路径(path)以及脚本信息(script)等等信息的数组。
  • 数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目
  • 服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
  • 具体参数比较多,可以参考手册
  1. PHP $_REQUEST
  • 用于收集HTML表单提交的数据。
<html>
<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;
?>
</html>

《PHP Day4:基础回顾与加强》 $_REQUEST结果

  1. PHP $_POST
  • PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”post”。
//在php中以$_POST的方式获得html中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;
?>
  1. PHP $_GET
  • 和$_POST一样用来收集表单数据,在HTML form标签中指定该属性:”method=’get'”。
  • $_GET 也可以收集URL中发送的消息
<a href="test.php?subject=PHP&web=runoob.com">测试 $_GET</a>
<?php
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>

ForEach循环

用于遍历数组

<html>
<body>

<?php
$beijings = array('beibei','jingjing','huanhuan','yingying','nini');
foreach ($beijings as $beijing){
    echo $beijing."<br>";
}
?>

</body>
</html>

PHP函数

  1. 创建php函数
function functionName()
{
要执行的代码;
}
  • 函数的名称应该提示出它的功能
  • 函数名称以字母或下划线开头(不能以数字开头)
自定义函数示例
function myFunc($x, $y)
{
    $total = $x + $y;
    return $total;
}

echo 'operation:'.myfunc(1,3);
  • 带返回值 return
  • 传递参数,单参数或者多参数,建议最多参数不要超过3个;超过3个用数组。

PHP魔术变量之 TRAIT代码复用

  • 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
  • Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
//魔法变量之 trait
class  base
{
    public function sayHello()
    {
        echo 'hello';
    }
}

trait sayhello
{
    public function sayHello()
    {
        parent::sayHello();
        echo 'world';
    }
}

class myHelloWord extends base
{
    use sayHello;
}

$o = new myHelloWord();
$o->sayhello();

如果是有基础的同学,那么看上面的代码是非常好理解的:

  • 优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

其他PHP魔术变量

  • LINE
  • FILE
  • DIR
  • FUNCTION
  • CLASS
  • METHOD
  • NAMESPACE
    具体使用请参看手册

PHP命名空间(namespace)

php命名空间解决的问题
  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
在同一个文件下定义不同的命名空间
< ?php  
namespace MyProject1;  
// MyProject1 命名空间中的PHP代码  
 
namespace MyProject2;  
// MyProject2 命名空间中的PHP代码    
 
// 另一种语法
namespace MyProject3 {  
 // MyProject3 命名空间中的PHP代码    
}  
?>  

注意:

  • 如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间
  • 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。
  • 比如:下面的代码就会出错,命名空间必须是程序脚本的第一条语句
<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 
?>
子命名空间
  • 与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:
<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间

const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }

?>

上面的例子创建了常量 MyProject\Sub\Level\CONNECT_OK,类 MyProject\Sub\Level\Connection 和函数 MyProject\Sub\Level\Connect。

  • 注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 \strlen() 或 \Exception 或 \INI_ALL。
<?php
namespace Foo\Bar;
include 'file1.php';

const FOO = 2;
function foo() {}
class foo
{
    static function staticmethod() {}
}

/* 非限定名称 */
foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。resolves to class Foo\Bar\foo, method 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
?>
延伸之const用法
  • 在类里面定义常量用 const 关键字,而不是通常的 define() 函数。
  • 常量的值一旦被定义后就不可在程序中更改。
<?php
Class Person{
    // 定义常量
    const country = "中国";

    public function myCountry() {
        //内部访问常量
        echo "我是".self::country."人<br />";
    }
}

// 输出常量
echo Person::country."<br />";

// 访问方法
$p1 = new Person();
$p1 -> myCountry();
?>

结果:
中国
我是中国人

一个敲代码,爱分享的人,我在这里!

《PHP Day4:基础回顾与加强》 来玩啊

    原文作者:老程和他的朋友们
    原文地址: https://www.jianshu.com/p/8ffe22e16b0e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞