2022-11-25 PHP笔记4(while、do...while、函数的创建、魔术常量、命名空间)

一、while 循环

语法:

while (条件)    //没有“;”

{

      要执行的代码;

}

<?php
$i=1;
while($i<=5)
{
    echo "The number is " . $i . "<br>";   
    $i++;   //循环每运行一次,i就会加1(不能遗漏)
}
?>

The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

二、do...while 循环语句

会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环

do
{
    要执行的代码;
}
while (条件);

三、函数

1.创建函数

// function 变量名()  无参数表示()为空,无返回也就没有return;包含参数(可有多个参数)可有return也可无,但echo输出语句位置会发生改变

//创建函数,不要跟系统的内置函数重名

//要执行函数需要调用函数

<?php

function functionName()   

{

      // 要执行的代码

}

?>

例:

<?php
  //无参数表示()里面是空的,无返回就是函数的程序里没有 return
  function functionwrite(){
    echo '123456';
  }
  functionName();  // 调用函数
?>
 
<?php
  function writename($r){
    $c = 2 * $radius * pi();
    echo '半径为'.$r.'的周长为:'.$c;  //包含参数无返回值,echo 语句写在函数里面
  }
  writename(10);  //调用函数
 
  function functionname($radius) {
    $c = 2 * $radius * pi ();
    return $c;
  }
  echo '半径为20的周长为:'.functionname(20);     //包含参数,有返回值,echo 语句写在外面。//functionname(20) 整体就得到一个值
?>
 

默认参数:指定某个变量作为可选参数,放在参数列表末尾并指定默认值,如:

<?php
    function values($a,$b=0){  //$b=0是默认参数,调用函数时未规定$b的值时,选择默认为0
        $a=$a+($a*$b);
        echo "$a<br>";
    }
    values(100,0.5);  >>150
    values(100);   >>100
?>

 四、魔术常量

预定义常量:预定义常量就是PHP内置的常量,预先定义好的,也称“魔术常量”

8个魔术常量

//__FILE__是两条下划线,不是一条

1.__LINE__   (line)

文件中的当前行号。

2.__FILE__   (file)

返回文件路径(绝对路径)

3.__DIR__   (dir)

返回文件所在的目录

4.__FUNCTION__    (function)

返回函数名称,区分大小写,不在函数中时返回空字符串

5.__CLASS__   (class)

返回当前所在类名,包含命名空间,区分大小写

6.__TRAIT__   (trail)

返回当前所在Trait名,包含命名空间,区分大小写

7.__METHOD__  (method)

返回当前所在方法名,(返回该方法被定义时的名字)包含命名空间,区分大小写

8.__NAMESPACE__  (namespace)

返回当前命名空间,区分大小写

<?php
//这是第2行
echo __LINE__;//3

echo __FILE__;//D:\www\1.php (返回文件路径(绝对路径))

echo __DIR__;//D:\www  (返回文件所在的目录)

echo userList();//userList

function userList()
{
	echo __FUNCTION__;  //返回函数名称,即userList
}
<?php

namespace app\controller; //当前命名空间

trait Person {
    public static function demo()
    {
        echo __TRAIT__;//app\controller\Person返回当前所在Trait名,包含命名空间
    }
}

class User  //类名:User
{
	use Person;

	public static function test()
	{
		echo __CLASS__;//app\controller\User

		echo __METHOD__;//app\controller\User::test
	}
}

User::test();
User::demo();

echo __NAMESPACE__;//app\controller

PHP的八个魔术常量_辰风沐阳的博客-CSDN博客_php魔术常量

五、命名空间

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

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

1.定义命名空间

<?php  
// 定义代码在 'MyProject' 命名空间中。通过 namespace 来声明
namespace MyProject;  
 
// ... 代码 ...  


?>

//可以在同一个文件中定义多个不同的命名空间代码,但不建议使用这种语法,建议使用大括号{}形式

如:

<?php  
//在同一个文件中定义多个命名空间
namespace MyProject;  

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

namespace AnotherProject;

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


//采用{}形式
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}

namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>  

但是!将全局的非命名空间中的代码与命名空间中的代码组合在一起,能使用大括号形式的语法。如:

<?php
/*declare 语句用于定义源文件编码,可在声明命名空间之前使用(唯一),其他所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。*/
declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码

namespace MyProject {    //声明命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

namespace {   // 全局代码必须用一个不带名称的 namespace 语句加上大括号括起来
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
/*以下代码会出现语法错误:
<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
*/

2.子命名空间

可以使用分层次的方式定义

<?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。

3.命名空间使用?

4.命名空间和动态语言特征?

5.namespace关键字和__NAMESPACE__常量

都用于访问当前命名空间内部元素

1)常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串

在命名空间中的代码:

<?php

namespace MyProject;

echo '"', __NAMESPACE__, '"'; // 输出 "MyProject"

?>

全局代码:

<?php

echo '"', __NAMESPACE__, '"'; // 输出 ""
?>

2)关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符

<?php
//命名空间中的代码 ,全局代码则直接namespace\...
namespace MyProject;

use blah\blah as mine; // 引入了 blah\blah 命名空间,并定义了个别名mine

mine\mine(); // 调用函数 blah\blah\mine()
namespace\blah\mine(); // 调用函数 MyProject\blah\mine()


?>

6.使用命名空间:别名/导入

有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名

如:
use My\Full\Classname as Another;  // 导入My\Full\Classname,并用Another作为别名

一行中包含多个use语句:

use My\Full\Classname as Another, My\Full\NSname;

7.使用命名空间:后备全局函数/常量?

8.全局空间

如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间

<?php
namespace A\B\C;

/* 这个函数是 A\B\C\fopen */
function fopen() { 
     /* ... */
     $f = \fopen(...); // 调用全局的fopen函数,名称前加上前缀 \ 表示该名称是全局空间中的名称
     return $f;
} 
?>

9.命名空间的顺序?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值