【原创】初学PHP总结的基础知识点注意事项

前言:跟着菜鸟教程学习PHP,里面有八个模块,初学完第一个模块,特意总结了一些易错的知识点:从PHP语法至PHP面向对象

1."." 和 ","连接字符串的区别:

. (实心点):将多个字符串连接成一个字符串,例:
<?php
$a = "hello ";
$b = "world!";
echo $a.$b;
?>
hello world!

上述例子有三个字符串,分别为:$a、 $b、 $a. $b

,(逗号):将多个字符串拼接起来,例:
<?php
$a = "hello ";
$b = "world!";
echo $a,$b;
?>
hello world!

上述例子有两个字符串,分别为:$a、 $b

2.print和echo的区别:

print只能输出一个字符串,而echo可以输出一个或多个字符串。所以当用","(逗号)连接字符串输出时,只能用echo!

3.switch-case的值的比较:

PHP中有"= ="(松散比较) 和 “= = =”(严格比较),那么switch-case中的值的对比是哪种比较呢?答案就是:"= ="(松散比较),例:
<?php
switch("1"){
    case 1:
        echo "a";
        break;
    default:
        echo "b";
        break;
}
?>
a

4." "(双引号)和’ '(单引号)的区别:

" "(双引号)内可以使用转义字符,’ '(单引号)按原样输出,但:\ \是单引号字符串字面量中的一个特殊情况,它给出了一个单引号字符串字面值量中没有插入\,\n,例:
<?php
    $str = 'a\\b\n';
    echo $str;
?>
a\b\n

5.非限定名称、限定名称和完全限定名称的区别:

非限定名称:(只限定了自己的名称)
例:Exception( ),调用时先尝试调用namespace\Exception( ),再尝试调用全局的Exception( )
限定名称:(限定了部分路径)
例:Another\Exception( ),调用namespace\Another\Exception( )
完全限定名称:(限定了绝对路径,namespace为全局;并且完全限定名称是确定的,故不受导入的影响)
例:\Exception( ),调用全局函数Exception( )

6. “::”(双冒号)的用法:

调用类中的静态方法或属性,例:
<?php
class test{
    static public $a = "a";
    static public function b(){echo "b";}
}
echo test::$a . PHP_EOL;
test::b();
?>
a
b
调用自身类或父类的属性或方法(与类对象使用"->"调用属性或方法相同),例:
<?php
class test{
    public function b(){echo "test's b()";}
}
class tests extends test{
    public function bs(){echo "tests's bs()";}
}
tests::b();
tests::bs();
$b = new tests;
$b->b();
$b->bs();
?>
test's b()
tests's bs()
test's b()
tests's bs()
补充:
1.与"->"的主要的区别:

双冒号是用于不创建对象的情况下(用类名)调用函数,类名::函数名;
->则是需要基于对象存在的情况下才可使用,类名->函数名为错误用法。

2.1.对象调用函数:

法一:对象::函数名;
法二:对象->函数名;

2.2.类名调用函数:

类名::函数名;

7.用不同方式调用函数的注意点:

我们可以用new字符创建的对象来调用函数;也可以用类名调用;还可以把类名赋给某个字符串,让该字符串对象按着类名调用的方式调用函数等。但是在命名空间存在的情况下,这几种方式的使用有些地方需要注意一下,例子:
<?php
namespace mytest;
class MyClass
{
    const CONSTANT = '常量值';
    function showConstant(){
        echo self::CONSTANT . '3' . PHP_EOL;
    }
}

echo MyClass::CONSTANT . '1' . PHP_EOL;

$classname = 'MyClass';
echo $classname::CONSTANT . '2' . PHP_EOL;//自5.3.0起

$class = new MyClass();
$class->showConstant();

echo $class::CONSTANT . '4' . PHP_EOL;//自PHP5.3.0起
?>
常量值1
PHP Fatal error: Uncaught Error: Class 'MyClass' not found in /box/main.php:15 Stack trace:
#0 {main}
  throw in /box/main.php on line 15

把" $classname = ‘MyClass’ “改为” $classname = ‘mytest\MyClass’ "

常量值1
常量值2
常量值3
常量值4

所以无论在有无命名空间namespace的情况下,用new创建类对象的方式、用类名调用函数的方式和自身调用的方式不会受到影响;而在命名空间namespace存在的情况下,用类名赋给字符串再调用的方式( $ classname = ‘MyClass’ ; $ classname::showConstant();)会有异常,类似于( $classname = ‘\MyClass’ ,完全限定名称,namespace为全局)
参考文档 | 菜鸟教程 | PHP教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值