# 命名空间

使用命名空间可以将函数声明在指定空间,防止函数重名引起冲突。 下面是定义 User.php 与 Article.php 两个文件内容如下:

user.php

<?php
namespace user;
function show(){
  return "hi i mam use.pph/show";
}
?>

article.php

<?php
namespace article;
function show(){
  return "hi i mam article.pph/show";
}
?>

namespace.php

<?php
include "user.php";
include "article.php";
echo user\show();
echo "\r\n";
echo article\show();
// hi i mam use.pph/show
// hi i mam article.pph/show
?>

# 参数传递

按值传递 按址(指针)传递 &

<?php
$a = 1;

// 值的传递
function inc($num){
  return ++$num;
}
echo inc($a);
echo "\r\n";
echo $a;
// 2
// 1

// 指针传递
function  deepinc(&$num){
  return ++$num ;
}
echo "\r\n";
echo deepinc($a);
echo "\r\n";
echo $a;
// 2
// 2

?>

# 点语法,展开语法

<?php
function sum ($arr){
  echo count($arr);
  echo "\r\n";
  $sum = 0;
  for($index= count($arr);$index>=0;$index--){
    $sum += $arr[$index];
   }
   return $sum;
}

function spread(...$args){
   echo sum($args);
}
echo "\r\n";
echo  spread(1,2,3);
//
// 3
// 6
?>

# 严格模式

<?php

// 严格模式,在文件头部定义
declare(strict_types=1);

function strict_input(int ...$num)
{
  return sum($num);
}

# 返回值类型

可以指定函数的返回值的类型

<?php
$a = 1;
// 通过:data_type来指定返回值的类型
function func(): int
{
  return "gausszhou";
}

// getMessage 获取异常消息内容 返回字符串类型的异常消息内容。
try {
  var_dump(func());
} catch (\Throwable $th) {
  echo $th->getMessage();
}
// Return value of func() must be of the type int, string returned


echo "\r\n";

// 其他规则
// ?int 表示返回类型为int或者null
function make(): String
{
  return 100;
}
try {
  var_dump(make());
} catch (\Throwable $th) {
  echo $th->getMessage();
}
// string(3) "100"

# 作用范围

局部变量

在函数之中声明的变量就是局部变量,并且该变量只有在函数范围之中才能加以使用。如果其它程序局部需要调用使用该变量值时,必须透过「return」指令,来将其传回至主程序区块以作后续处理。

全局变量

在函数范围之外声明的变量为全局变量,在函数无法直接使用全局变量,函数要使用全局变量,必须要利用 global 引入或 $GLOBALS 超全局数组引入。

静态变量

PHP 支持声明函数变量为静态的(static)。一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调用时被初始化

<?php

$zcg = "gausszhou in global";

function func()
{
  $zcg = "zcg";
  echo "在函数体内\r\n";
  echo $zcg;
  // 在函数体内
  // zcg
}

func();
echo "\r\n在函数外\r\n";
echo $zcg;
// 在函数外
// gausszhou in global

function func2()
{
  global $zcg;
  // 使用global关键字引入全局变量
  echo $zcg;
}
echo "\r\n";
func2();
// gausszhou in global


function sum(int ...$num): int
{
  static $count = 0;
  // 这个静态变量会保存运行后的值
  return $count += array_sum($num);
}
echo "\r\n";
echo  sum(1, 2, 3);
echo "\r\n";
echo  sum(1, 2, 3);