1. PHP 基础入门

发布于 2024-09-22 06:39:11 字数 8041 浏览 9 评论 0

1.1.1. PHP vs Java vs C

  1. C/C++,编译成机器语言(二进制)来运行
  2. Java 编译成.class 文件,称为 bytecode,由 jvm 来运行,Java 语言不垮平台,是 JVM 跨平台。
  3. 严格说,PHP 是一门编译语言,由 zend 虚拟机编译成 opcode,在执行 opcode
  4. Opcode 能缓存吗?
    答:PHP 本身不支持,但是 apc,xcache 等加速器实现了。
    
  5. PHP 是弱类型语言。C、Java 是强类型语言

1.1.2. echo & print & printf & sprintf & var_dump & print_r

  1. echo
    输出函数,是命令,不能返回值。echo 后面可以跟很多个参数,之间用分号隔开。
    echo 比 print 稍快,因为它不返回任何值
    
  2. print
    是函数,可以返回一个值,只能有一个参数。
    
  3. printf
    把文字格式化以后输出,如:
    $name="hunte";
    $age=25;
    printf("my name is %s, age %d", $name, $age);
    
  4. sprintf
    跟 printf 相似,但不打印,而是返回格式化后的文字,其他的与 printf 一样。
    

1.1.3. 单引号和双引号的区别

单引号不支持变量的解析和转义字符,而双引号可以直接解析变量和转义字符!

1.1.4. isset vs empty vs is_null

  1. empty
    判断一个变量是否为空
    null、false、00、0、’0′、』。都会返回 true。
    
  2. isset
    判断一个变量是否设置
    0、00、’0′、』、’ ‘、false、’false’、’null’都返回 true。 
    只有值為 null 的变量返回 true
    
  3. if 判断式
    0、00、0.0、’0′、』、false、null 返回 false 
    ‘00′、’0.0′、’null’、’false’、’ ‘返回 true
    
  4. is_null 判断变量是否为 NULL
    is_null,我们可以把它看成是!isset,是 isset 的一个逆操作,下面一张表可以很清楚的说明他们之间的关系:
    
    Table 1: empty vs isset vs is_null
    变量emptyis_nullisset
    $a=""truefalsetrue
    $a=nulltruetruefalse
    var $atruetruefalse
    $a=array()truefalsetrue
    $a=falsetruefalsetrue
    $a=15falsefalsetrue
    $a=1falsefalsetrue
    $a=0truefalsetrue
    $a="0"truefalsetrue
    $a="true"falsefalsetrue
    $a="false"falsefalsetrue

    总结

    • 只要变量是否为” “或者 0,或者是 false 和 null,只要是这些值 empty 都会返回 true
    • isset 是判断变量是否存在,只要你这个变量不是 null 或未赋值,返回结果都是 true
    • is_null 正好是 isset 的反结果

1.1.5. exit vs die

  1. die() 是 exit() 函数的别名。功能上,die() 就等同于 exit();
  2. 使用场景:
    当传递给 exit 和 die 函数的值为 0 时,意味着提前终止脚本的执行,通常用 exit()
    当程序出错时,可以给它传递一个字符串,它会原样输出在系统终端上,通常使用 die()
    

1.1.6. include vs require vs include_once vs require_once

  • require will produce a fatal error (E_COMPILE_ERROR) and stop the script(致命错误)
  • include will only produce a warning (E_WARNING) and the script will continue(警告)

1.1.7. stripslashes, htmlspecialchars, htmlentities, and strip_tags

  1. stripslashes——Un-quotes a quoted string
    清理字符串中的反斜杠 \
    与之相反的是 addslashes,在字符串中的单引号('),双引号("),反斜杠(\),NULL 前面添加反斜杠。通常默认的,php 会对所有的 GET,POST 和 COOKIE 数据自动运行 addslashes()
    
  2. htmlspecialchars——Convert special characters to HTML entities
  3. htmlentities——Convert all applicable characters to HTML entities
  4. strip_tags——Strip HTML and PHP tags from a string
  5. Strip 去除的意思

1.1.8. return, break, and continue

  1. return,立即停止执行函数内部的代码,然后继续执行下面的代码
  2. break,立即停止执行本循环体内的所有循环,最常见的 switch 循环。
  3. continue 与 break 都是用于终止循环执行,所不同的是,break 是彻底终止循环体的执行,而 continue 是结束本次循环,继续下一次的循环。

1.1.9. 值传递和引用传递的区别

/**
 * 值传递
 * @param [type]
 */
function add($a){
    $a++;
    $res = $a;
    return $res;
}
$a = 100;
echo $a.'<br />';   // 100
echo add($a).'<br />';  // 101
echo $a.'<br />';   // 100


/**
 * 引用传递
 * @param [type]
 */
function add(&$a){
    $a++;
    $res = $a;
    return $res;
}
$a = 100;
echo $a.'<br />';   // 100
echo add($a).'<br />';  // 101
echo $a.'<br />';   // 101


// 对象的引用
class A{
    var $abc="ABC";
}
$b =new A();
$c =$b; // 等效于 $c=&$b;
echo $b->abc;//这里输出 ABC
echo "<br />";
echo $c->abc="DEF";//这里输出 ABC $b->abc="DEF";
echo "<br />";
echo $c->abc;//这里输出 DEF
$d1 = clone $c;
echo "<br />";
echo $d1->abc="GHI"; //这里输出 GHI $d1->abc="GHI";
echo "<br />";
echo $d1->abc;//这里输出 GHI
echo "<br />";
echo $c->abc;//这里输出 DEF

// 函数的引用
function &test2(){
    static $b=0;//申明一个静态变量
    $b=$b+1;
    echo $b;
    return $b;
}
$a=test2();//这条语句会输出 $b 的值 为1
echo "<br />";
$a=5;
$a=test2();//这条语句会输出 $b 的值 为 2
echo "<br />";
$a=&test2();//这条语句会输出 $b 的值 为 3。将 return $b 中的 $b 变量的内存地址与 $a 变量的内存地址指向了同一个地方。
echo "<br />";
$a=5;
$a=test2();//这条语句会输出 $b 的值 为 6

// 函数地址引用
function test1(&$a){
    $a=$a+100;
}
$b=1;
test1($b);
echo $b;//输出101
//这里$b 传递给函数的其实是$b 的内存地址,通过在函数里改变$a 的值,就可以改变$b 的值
// 变量
$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo "<br />";
echo $b;//这里输出:ABC
$b="EFG";
echo "<br />";
echo $a;//这里$a 的值变为 EFG 所以输出 EFG echo $b;//这里输出 EFG
?>

1.1.10. 构造函数 vs 析构函数

  1. 构造函数
    • 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
    • Java、C++ 构造函数的名称与类的名称是完全相同的,PHP 语言目前普遍用法是使用 __construct() 代替。
    • 构造函数不会返回任何类型,也不会返回 void。
  2. 析构函数
    • 类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
    • Java、C++ 析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。PHP 语言普遍用法是使用 __desctruct() 代替。
    • 析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
    • 试图在析构函数(在脚本终止时被调用)中抛出一个异常会导致致命错误。

1.1.11. public, protected, private and final

  1. public 用于声明可以外部调用类或方法
  2. protected 声明只能被继承子类调用
  3. private 用于定义私有属性或方法,仅供内部类调用
  4. final 指定某个类不允许被继承或者是某个方法不允许被修改

1.1.12. PHP 命令传参

// 1. 使用 $argc $argv 接受参数
echo "接收到{$argc}个参数";
print_r($argv);

// 2. 使用 getopt 函数
$param_arr = getopt('name:age:');//只接受 name 和 age 两个参数
print_r($param_arr);
// $ php test.php -name john

// 3. 通过 php 系统定义 CLI 的常量:STDIN , STDOUT , STDERR
$fs = true;
$username = '';
do {
    if ($fs) {
    fwrite(STDOUT, '请输入用户名:');
    $fs = false;
    } else {
    fwrite(STDOUT, '抱歉,用户名不能为空,请重新输入:');
    }
    $username = trim(fgets(STDIN));
} while (!$username);
echo '您输入的用户名是:' . $username . "\r\n";

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

柏林苍穹下

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

lee_heart

文章 0 评论 0

往事如风

文章 0 评论 0

春风十里

文章 0 评论 0

纸短情长

文章 0 评论 0

qq_pdEUFz

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文