php基础——基础语法知识

PHP 的特点

特点1:解释型语言

PHP 是解释型语言,不需要事先被翻译为机器码

特点2:弱类型语言

PHP 是弱数据类型语言,不必声明变量的数据类型,会根据变量的值,自动把变量转换为正确的数据类型

PHP与HTML混编

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是个php文件</title>
    <style>
        h1{
            width: 200px;
            border: 3px solid gold;
            text-align: center;
        }
    </style>
    <script>
        alert('OK');
    </script>
</head>
<body>
<?php
for ($i=0; $i<10; $i++){
    echo "<h1>hello-$i</h1>";
}
?>
</body>
</html>

内存分析
在这里插入图片描述

流程分析

1.浏览器将请求发给apache
2.apache检测请求,若后缀名是.php,就去调用php处理模块,该模块将全部php代码读入模块内处理
3.php处理模块根据标记,仅处理php代码,处理结束将代码重新封装交给apache
4.apache将代码交给浏览器,浏览器拿到的是处理后的代码,是看不到php源代码的
5.浏览器解析代码,展示给用户

编程语言的分类

翻译器

计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所编写的语言翻译成机器语言,计算机才能执行程序。程序语言翻译成机器语言的工具,被称为翻译器

由此可见,所谓的“翻译”,指的是翻译成计算机能够执行的指令。

翻译器翻译的方式有两种:一种是编译,另一种是解释。两种方式之间的区别在于翻译的时机不同。

  • 编译器:在代码执行之前,事前把所有的代码一次性翻译好,生成中间代码文件,然后整体执行。

  • 解释器:边翻译,边执行(在代码执行时进行及时翻译,并立即执行)。当编译器以解释的方式运行时,也称之为解释器。

对应的语言,称之为“编译型语言”、“解释型语言”。

编译型语言

  • 定义:事先把所有的代码一次性翻译好,然后整体执行。

  • 优点:运行更快。

  • 不足:移植性不好,不跨平台。

  • 编译型语言举例:c、c++

比如说,c语言的代码文件是.c后缀,翻译之后文件是.obj后缀,系统执行的是 obj 文件;再比如, java 语言的代码文件是.java后缀,翻译之后的文件是.class后缀。(注意,Java 语言不是严格的 编译型语言,这个一会儿会讲)

解释型语言

  • 定义:边翻译边执行(翻译一行,执行一行),不需要事先一次性翻译。

  • 优点:移植性好,跨平台。

  • 缺点:运行更慢。

  • 解释型语言举例:JavaScript、php、Python。

Java语言

Java 语言既不是编译型语言,也不是解释型语言。翻译过程:

  • 编译:.java代码文件先通过 javac 命令编译成.class文件。

  • 执行:.class文件再通过 jvm 虚拟机,解释执行。有了 jvm 的存在,让 java 跨平台了。

PHP数据类型

  • 基本数据类型:整形 浮点型 字符串 布尔
  • 复合数据类型:数组 对象
  • 特殊数据类型:资源 NULL

PHP定义变量

  • php如果只是声明,但是没有定义,会报undefind,如$a
  • js中也是这样,但强类型语言不是
  • php中普通变量名

php变量命名规范

  • php变量前面必须加上$符号
  • php变量区分大小写,函数不区分大小写

php表达式

  • 在PHP中,几乎所写的任何东西都是一个表达式
  • 简单但却最精确的定义一个表达式的方式就是“任何有值的东西”
$a = 10;    // 表达式 10返回给$a
$b = 10*2;  // 表达式 先运算在返回给$b

function test(){
}
$c = test();    // 表达式 返回值为null
var_dump($c);

PHP动态变量名

  • php中变量名,常量名,函数名,类名是可变的
  • 遇到$变量名(),php会解析变量,然后调用函数
// 动态变量名
$animal = "动物";
$dog = "animal";
$hsq = "dog";
echo $animal, $$dog, $$$hsq;  //动物动物动物

// 动态常量名
define("PI", 3.14);
$test = 'PI';
echo constant($test);

// 动态函数名
function dance(){
    echo '跳舞';
}
$test = 'dance';
$test();

PHP是以文件整体来执行的

php是以文件作为整体来执行的,如果如果进入代码区时发现有语法错误,会报错,且不输出任何数据

// 直接报错,不输出任何数据
$a = 111;
function test(){
    echo 'hello'
}
$b = 222;

PHP变量作用域

内存角度

  • 如果没有变量指向数据,那数据就销毁(除了超全局和静态)
  • 局部变量,如果不人为unset()的话,函数调用结束,为函数开辟的栈销毁,原本函数栈中变量指向的数据不在有变量指向,也随之销毁
  • 全局变量,如果不人为unset()的话,脚本执行完毕主栈才销毁,主栈销毁,原本主栈中变量指向的数据不在有变量指向,也随之销毁
  • 超全局变量,与全局的区别就是即使在函数内,也可以直接用,无需global

概念角度

  • 局部变量:函数内部有效
  • 全局变量:在函数外部有效(在函数内部通过global访问)
  • 超全局变量:在一个脚本的全部作用域中都可用,在函数或方法中无需执行 global 就可以访问

代码示例

// 全局变量
$a = 1;
function test(){
    // 局部变量
    $b = 2;
    // 在函数内使用全局变量
    global $a;  // 等价于 $a=&$GLOBAL[$a] ,此时主栈和新栈都有一个$a 指向同一个数据  
    // 函数内直接使用超全局变量
    var_dump($GLOBALS);
    // 函数内利用超全局变量访问全局变量
    echo $GLOBALS[$a];

}

test();

为什么PHP函数可以在定义声明前就能调用?PHP程序的执行不是从上到下的吗?函数全局性的基本原理是什么?

首先PHP不是单纯的按照行来边解释边执行的,而是先由Zend引擎翻译PHP代码到Zend二进制操作码,然后再去执行操作码。

对于函数的位置,因为函数的作用域是全局的,所以只要定义了,那么就可以在任意位置去调用它。

PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然。(348讲)

348讲解释: php在执行的时候,是以文件为单位执行,也就是说,在执行php代码时,整个文件已经被调入内存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值