学习PHP

PHP是一种创建交互性动态站点的强有力的服务器端脚本语言。Zend框架由于多样的功能、并且有一个广泛的支持系统,流行了很长时间。而CakePHP是一个晚于Zend的PHP框架,相应的支持系统也比较少,但是更为方便和易于使用

1   global 关键字用于函数内访问全局变量。

2   全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

<?php $x=5; $y=10;

function myTest() {

$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest();

echo $y; ?>

echo PHP_EOL; // 换行符

Static 作用域

<?php

echo <<<EOF <h1>我的第一个标题</h1> <p>我的第一个段落。</p>

EOF;

// 结束需要独立一行且前后不能空格

?>

  • 必须后接分号,否则编译通不过。
  • 2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  • 4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,

 

  • echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

PHP var_dump() 函数返回变量的数据类型和值:

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
  • 0 == false: bool(true)
    0 === false: bool(false)
    
    0 == null: bool(true)
    0 === null: bool(false)
    
    false == null: bool(true)
    false === null: bool(false)
    
    "0" == false: bool(true)
    "0" === false: bool(false)
    
    "0" == null: bool(false)
    "0" === null: bool(false)
    
    "" == false: bool(true)
    "" === false: bool(false)
    
    "" == null: bool(true)
    "" === null: bool(false)

设置 PHP 常量

设置常量,使用 define() 函数

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

// 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com");

echo GREETING; // 输出 "欢迎访问 Runoob.com"

 

并置运算符 (.) 用于把两个字符串值连接起来。

$txt1="Hello world!"; 
$txt2="What a nice day!"; 
echo $txt1 . " " . $txt2; 

strlen() 函数

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

中文下的字符在 UTF-8 下是 3 个字符长度,在 gbk 下是2个字符长度。 mb_strlen 设置指定编码输出中文字符个数:

echo mb_strlen("中文字符",'utf-8'); 

 

$str = "你好!!a";
echo strpos($str ,"!");这个 strpos() 只能用于判断字符在字符串中是否存在。

PHP7+ 版本新增整除运算符 intdiv()

 

(expr1) ? (expr2) : (expr3) 

对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

PHP7+ 版本多了一个 NULL 合并运算符 ??

<?php // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 类似的三元运算符 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>

$c = $a <=> $b;组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。

// 优先级: && > = > and

// 优先级: || > = > or $a = 3;

$b = false;

$c = $a or $b;

var_dump($c); 

/ 这里的 $c 为 int 值3,而不是 boolean 值 true

$d = $a || $b;

var_dump($d);

 

$t=date("H");

if ($t<"20") { echo "Have a good day!"; }

 

自 PHP5.0 开始,用PHP获取系统时间时,时间比当前时间少 8 个小时。原因是 PHP.ini 中没有设置 timezone 时,PHP 是使用的 UTC 时间,所以在中国时间要少 8 小时

PHP 中,有三种类型的数组:

  • 数值数组 - 带有数字 ID 键的数组
  • 关联数组 - 带有指定的键的数组,每个键关联一个值
  • 多维数组 - 包含一个或多个数组的数组

$cars = array (

array("Volvo",100,96),

array("BMW",60,59),

array("Toyota",110,100) );

$sites = array 

    "runoob"=>array 
    ( 
        "菜鸟教程", 
        "http://www.runoob.com" 
    ), 
    "google"=>array 
    ( 
        "Google 搜索", 
        "http://www.google.com" 
    ), 
    "taobao"=>array 
    ( 
        "淘宝", 
        "http://www.taobao.com" 
    ) 
); 
print("<pre>"); // 格式化输出数组 
print_r($sites); 
print("</pre>");

获取数组的长度 - count() 函数

<?php

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

foreach($age as $x=>$x_value)

{ echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }

?>

数组排序时发现 sort 与 rsort 排序完毕以后,var_dump 输出时原有 key 值丢失,变为数字索引。”

正解:关联数组进行升序和降序排列应使用

  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列

 

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST用于收集HTML表单提交的数据。
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION
  •  

 

  • $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目

echo $_SERVER['PHP_SELF']; echo "<br>";

echo $_SERVER['SERVER_NAME']; echo "<br>";

echo $_SERVER['HTTP_HOST']; echo "<br>";

echo $_SERVER['HTTP_REFERER']; echo "<br>";

echo $_SERVER['HTTP_USER_AGENT']; echo "<br>";

echo $_SERVER['SCRIPT_NAME'];

 

 PHP 中,提供了下列循环语句:

  • while - 只要指定的条件成立,则循环执行代码块
  • do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
  • for - 循环执行代码块指定的次数
  • foreach - 根据数组中每个元素来循环代码块

使用for循环,实现冒泡排序:

<?php
$arr = array(5,3,6,2,8,10);
for($i = count($arr)-1;$i>=0;$i--){
    for($j = 0 ; $j < $i ; $j++){
        if($arr[$j+1] > $arr[$j] ){
            $aa = $arr[$j+1];
            $arr[$j+1] = $arr[$j];
            $arr[$j] = $aa;
        }
    }
}
print_r($arr);
?>
<?php
include ('conn.php'); //导入
function titleshow () {
    global $title;  //php7 中如果不做声明,可能不能调用这个 titile 函数
    echo $title;
}
titleshow();
?>

 

__LINE__

文件中的当前行号。

__FILE__

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径

__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

__FUNCTION__

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__CLASS__

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

__NAMESPACE__

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

__METHOD__

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

__TRAIT__

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

多个 trait 的情况:

通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。示例代码如下:

<?php
trait Hello {
    public function sayHello() { 
        echo 'Hello ';    
    }
}
trait World {    
    public function sayWorld() {     
        echo 'World';  
    }
}
class MyHelloWorld { 
    use Hello, World;  
    public function sayExclamationMark() {   
        echo '!'; 
    }
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>

最终输出:Hello World!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值