php的基础语法[1]

忘记写点说明就各种文档开坑了。
如果有初学者看我写的教程学拍断片,那是要被坑的,所以这很不友好。

首先,PHP代码文件需要使用<?php?>作为开头和结尾,这点和jsp有点像。
不过可以不需要,具体视php.ini中的设置而定。

数据类型

// 此处有部分内容(指说明)是搬运的

数据类型符号名说明
字符串string字符串是字符序列,可以是引号内的任何文本。就是文本,手写的时候用单/双引号括起来,详见底下的说明:#引号
整数int整数不能有小数点、正负均可,可以用三种格式规定整数:十进制、十六进制(前缀为0x)或八进制(前缀为 0)。前面已经说清楚了,要补充的是,PHP的整数普通情况下是int,但超出int范围之后,会自动变成long long(印象里的,反正当成long long用就OK)(long long的上限好像是91亿亿?)
逻辑(布尔值)bool逻辑是 真/true 或 假/false, 常用于条件判断部分情况下,其他数据类型值可以转换为逻辑值,如整数不为0时转换为true,字符串为空时转换为false
数组array数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标] 其中的下标只能为整型常量或整型表达式。这段说明的后半句(删除线)是错的,下标还支持文本,具体调用时要看怎么声明这个数组,比如你用json的时候(又跑偏了)。
对象object对象是存储数据和处理数据方式的数据类型,在 PHP 中,必须明确的声明对象,必须声明对象的类(关键词 class)。类是包含属性和方法的结构。在对象中定义数据类型,在该类的实例中使用此数据类型前面说了什么我不是很懂,反正你要写面向对象的代码时就要用class,这是PHP的关键字,有学c++的同学应该懂,具体展开就太麻烦了,等涉及到的时候再一一说明把,毕竟类本身还是有很多很多很多知识点的,什么继承、多态、访问限制,我想你现在一定不想看到那么长的说明篇幅,就算你想,我也不想。
NULLNULLNULL值表示变量无值,表示变量是否为空。区别空字符与空值数据库。嗯。。反正区别与0与空文本把,使用检测函数时(isset、asset、is_null等)还会有一点区别
  • 前三个(intstringbool)以及NULL属于基本数据类型。

举几个栗子(这里先不提字符串):

前提:
php中,每句代码需要使用英文分号(;)结尾。
使用 var_dump 这个函数输出值,也可以输出数据类型,一般是类型在前,值在后,如:输出整数1 为 int(1)

var_dump(1); // 输出一个正整数:int(1)
var_dump(-999); // 输出一个负整数:int(-999)

然后尝试点别的
比如说,我们已知整数(int)的表示范围在 -2147483648 ~ 2147483647
那我们做个小小的尝试,把整数超出这个范围,比如 复读机最爱的 +1

var_dump(2147483648);

然而并没有像想象中那样,输出long long(2147483648),而是输出float(2147483648),
看样子上面的「注」也写错了,但超出表示范围后会自动转换类型是对的,

不过,不知道什么时候变成double?
等等,先输出个普通小数看看,

var_dump(123.456); // 输出 float(123.456)

已知float能表示6~7位小数,那

var_dump(123.01234567891234); //输出:float(123.01234567891)
var_dump(123.01234567896789); //输出:float(123.01234567897)

???,为啥好像有点不对劲,好像可以十几位?
而且意外的都是输出float,不过最后一位会根据下一位选择是否四舍五入进一。

还是查查资料看看有没有希望把,

float(浮点型,也称作 double)

看样子是PHP的自定义路线了,不过不是说好double可以表示14位吗???


然后是逻辑/布尔,truefalse都是关键字
true表示真,可以理解成条件成立,false表示假。

var_dump(true); // 输出 bool(true)

再尝试下区分大小写

var_dump(True); // 输出同上

说明这个关键字忽略大小写,并且统一小写


接下来是数组,
数组要用array这个函数构建

先在这里构建个普通数组吧
// 最后两个是字符串,略超纲,可忽略不计

var_dump(array(0, 2, true, 666, '123', "456"));

输出:

array(6) {
  [0]=>
  int(0)
  [1]=>
  int(2)
  [2]=>
  bool(true)
  [3]=>
  int(666)
  [4]=>
  string(3) "123"
  [5]=>
  string(3) "456"
}

我想你大概能看出,数组是这么构建的:
array(值1, 值2, ...);
值可以是任意数据类型,但前提是你得先能表示出来。
值之间用英文逗号分开,要注意的是,最后一个值后面不用加逗号,比如「array(1,2,3,)」就是错误的写法。


再构建个略微奇怪的数组好了
// 为了方便阅读,这里把代码进行适当换行,另:这也符合PHP语法

var_dump(
    array(
        "123" => "456",
        '456' => 233,
        666   => true,
        "abc" => 'gg',
        true  => '?' // 这个没准会报错,尝试下
    )
);

输出会是这样的:

array(5) {
  [123]=>				// 这里本来是字符串"123"
  string(3) "456"
  [456]=>				// 这里本来也是字符串"456",但为什么显示出来是数字呢?
  int(233)
  [666]=>
  bool(true)
  ["abc"]=>				// 那这里的abc怎么就是字符串呢?
  string(2) "gg"
  [1]=>					// 虽然没报错,但我的true呢???
  string(1) "?"
}
*/
?>

这个数组的构建方法怎么看起来怪怪的,而且输出的也太???

首先要说下这个数组怎么构建的,
这里指「xx => yy」xx代表键名,yy代表键值,

既然叫数组,那么肯定有一堆值,(其实蛮迷惑的,数组应该叫 值堆 或者 键堆 才对),
那你想要获取其中某个值的话,肯定要知道这个值的地址,就像你去别人家,要知道他家地址对吧?键名就是用来起这个作用。那么,我想不用说,你应该知道键值代表什么了。

那么,现在说说这个键名,你也看到了,它似乎就支持数字和文本,而且如果文本里只有数字的话,最后还会变成数字。

那你可能会说,「这不是还有个逻辑值true吗?」,但最后还是被转换成数字了对吧?(true1false0),
所以键名就两种表示方法:整数和文本,更优先用数字表示键名,在文本仅数字时也会转换为数字作为键名。

这里可能还有个疑惑,「键名用小数会怎样?」

var_dump(array(123.45=>666));

于是乎:

array(1) {
  [123]=>
  int(666)
}

小数部分被舍弃了,所以还是只能用整数和文本

那么为什么要写这个奇怪数组呢,
是因为还要说明一件事:如果未声明键名,那么键名就会是整数,从0开始。

还有一点要补充,
如果在声明时创建了多个相同的键名,那么最后只会有一个键名,值为最后创建的键值

var_dump(
    array(
        1 => 123,
        1 => 456,
        1 => 789
    )
);

输出:

array(1) {
  [1]=>
  int(789)
}

这里暂时不具体提类, 只需要了解类是这么声明的:

class name {
	...
}

以及类是不能拿来输出的。


NULL也是个常量关键词,不区分大小写。
它是一种单独的数据类型,不代表整数0、空文本、逻辑值false,但是可以互相转换。

这里补充个点:
PHP是个弱类型语言,基本数据类型可以互相转换,一般不需要转换就可以使用,

也可以根据需要进行强制转换:
(目标数据类型)(要转换的数据 / 变量)

  • 这里有两对括号,前面的是强制的,后面的可不加,但为了避免混淆,所以尽可能加上。
  • 目标数据类型就是前面提到的四种基本数据类型,还有小数/长整数(float)
  • 数据就是手打的,比如111"123"truenull,变量暂时不解释。

拿来转换null到其他数据类型看看吧:

var_dump((int)null);
var_dump((bool)null);
var_dump((float)null);
var_dump((string)null);

输出:

int(0)
bool(false)
float(0)
string(0) ""

输出 / 打印

目前了解到以下四个函数:

  • echo:输出普通变量
  • print:输出普通变量,似乎与echo没什么差别。
  • print_r:常用于打印数组。
  • 上面用过的var_dump:同print_r,但会输出数据类型,输出部分类型时会还会输出数据长度,如数组的元素个数,文本的长度。

准确来说,echoprint 并不能算函数,而是一种结构,但这里把它当做函数更加利于理解。
echoprint 只能输出一般的数据类型变量(如数值,文本),如果输出其他类型变量,只会输出数据类型名
使用 echoprint 时可以不用括号,但要在函数名和输出值之间加空格。
使用 echoprint 输出布尔值时,true会被转换为数字1,false会输出一个空值。
使用 print_rvar_dump 打印布尔值和NULL时只会输出一个换行符,
输出换行时需要注意调试环境,如果是网页模式,建议使用<br>;在命令行或网页源代码模式下建议使用\n,否则数据会相连在一起。建议使用后者,因为使用 print_rvar_dump 函数时是输出\n而不是<br>

补充:
在其他同学的聊天记录中,我才知道echo是可以输出多个数据的(用逗号分开)
简单如:echo $a, $b, $c, "\n";
demo:// 这里使用echo "\n";作为分隔符

echo 1; // 输出1
echo "\n";

echo(1); // 输出1
echo "\n";

print 1; // 输出1
echo "\n";

print(1); // 输出1
echo "\n";

echo "123"; // 输出123
echo "\n";

echo true; // 输出1
echo "\n";

echo false; // 输出空值
echo "\n";

echo array(1,2,3); // 输出array并且产生一个警告
echo "\n";

print array(1,2,3); // 输出array并且产生一个警告
echo "\n";

print_r 123; // 出错
var_dump 123; // 出错

print_r(123); // 输出123
echo "\n";
var_dump(123); // 输出int(123)
echo "\n";

print_r(array(1,2,3));
/* 
只会输出数组的键值:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
*/

var_dump(array(1,2,3));
/* 
不仅输出数组的键值,还会输出数组大小、值类型:
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
*/

变量

不同于c/c++、java,php的变量名是以$打头,如$a
变量名可由大小写字母、数字和下划线(_)构成,但首字母不能为数字。
变量名同样对大小写敏感声明时不需要声明数据类型,直接赋值即可

「注」php中的赋值与c一样,都是用一个等于号表示,变量在左,值在右

$a = 1;
$A = 0;
var_dump($a);
var_dump($A);

输出

int(1)
int(0)

说明虽然都是a,但是$a $A

在循环里使用变量时需要提前声明,否则会产生警告(虽然并不影响使用):

for($i = 0; $i < 3; ++$i) {
	$n += $i; //等同于 $n = $n + $i;
}
var_dump($n);

输出:

int(3)

未声明的变量默认为null,即整数类型下为0,文本类型下为""

引号

  • php中使用两种英文引号用来表示单字符或字符文本。
  1. 单引号'
  2. 双引号"
  • 如果要表示引号,前面加个反斜杠即可,如:'\''表示'"\""表示"
echo '''; // 出现错误,看这部分的代码高亮结果出现混乱就知道了。
echo '\''; // 输出一个单引号
echo "\""; // 输出一个双引号
  • 两者可以互相使用,使用时视为纯文本,如'"'表示""'"表示',不需要转义。
echo '"'; // 输出一个双引号:" 
echo "'"; // 输出一个单引号:'
  • 两者都可以使用\转义符,但区别在于:
    单引号下的\仅能转义引号,
    双引号下可以使用各类转义标志,如\n表示换行;
echo '\n'; // 仅输出\n
echo "\n"; // 输出一个换行

双引号中可以使用变量:

$a = 123;
echo "\$a = $a";

输出:$a = 123


注释

分为单行和多行注释,

  • 单行注释使用//开头,没有结尾,或者说文本中的换行符就是结尾。
  • 多行注释使用/*打头,*/结尾,要注意的是,已注释中的内容不能有*/

这里拿单行注释做例子:

$a = 0;
// $a = 1;
var_dump($a);

本来按正常操作,a要被赋值为1,但是因为使用了注释符,所以a未发生任何变化,还是0


常量

和变量一样,常量名可由大小写字母、数字和下划线(_)构成,首字母同样不能为数字。
不同的是,常量名不需要$作为开头,而且一旦定义,就不能改变其值,也不能像变量那样可以手动删除。并且,常量定义后,可以在后续执行的脚本中任意位置使用其值。

常量不像变量那样使用一个=赋值定义,而是使用函数define
函数原型:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
  • $name,即常量名,不限制大小写,但一般使用全大写以区分变量
  • $value,即常量值,可以为任意类型,可以为空文本。
  • $case_insensitive,即是否不区分大小写,可空,默认值为false,即区分大小写。

「例」定义一个名为AAA,值为2的常量:

define('AAA', 2);
echo AAA + 3;

这里的echo等同于2 + 3,所以输出5

那要怎么检测是否存在这个变量呢?
使用defined函数:

define('AAA', 2);
var_dump(defined('aaa'));
var_dump(defined('AAA'));

因为define的时候未标明第三个参数,即常量名区分大小写,
所以第一个var_dumpfalse,第二个才是true

需要注意的是,使用这个函数时,AAA的两头一定要引号:

define('AAA', 2);
var_dump(defined(AAA));

否则AAA会被替换成2,相当于执行var_dump(defined(2));,那一定会是false的。

常量有个用处:如果你把代码放在很多文件里,那可以在调用入口文件里定义一个常量,在其他文件开头加个检测代码,防止他人未经过入口文件进行直接调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值