PHP:从新手到废柴的快速通道?揭秘变量和数组的绝活儿

PHP,这货让一堆程序猿爱恨交加,可它还是在网页开发圈里混得风生水起。有人说它OUT了,可我这种老油条得说,PHP的精髓不是语法多帅,而是能让你最快速度从新手变废柴。今天个,我就跟你们聊聊PHP的“精华”,顺便带你们瞧瞧我最近搞的一个项目,看看我是怎么把一个简单功能搞成超级大工程的。

PHP的精粹:变量和数组

PHP里有个绝活儿,就是那变量和数组。变量前面得有个$符号,这设计,让人又觉得它挺有个性,又觉得它有点烦人。个性是它能让代码显得特别清楚,烦人是因为你老搞不清这变量是从哪儿蹦出来的。就像下面这段代码:

$name = "John";

$age = 25;

这货儿是个数组,里面装着名字和岁数,格式就是这德行:名字是啥,岁数是几。

这事看着挺简单?可要是你一不小心把名字变量写错了,PHP那家伙可不会给你闹脾气,它就那么默默地给你来个空空如也。然后你搞了半天,才发现是名字写错了,这时候你是不是觉得自己有点二?

数组的“精粹”

PHP的数组那可是个宝,既能当清单使,又能做字典用。比如说:

这货里头装着苹果、香蕉、樱桃,就这仨东西。

水果价格表如下:苹果1.2元,香蕉0.8元,樱桃2.5元。这价格,苹果贵得有点意思,香蕉便宜得让人心动,樱桃那简直是奢侈!

看起来挺风光,可PHP里的数组有点不靠谱,它那键儿既可以是字符串,也能是数字。要是不小心搞错了,比如:

这货搞了个数组,里头"1"对应个"apple",而数字"1"又对应了个"banana"。这俩"1"搞混了,真是个笑话。

这时候,$mixedArray就变成了array(1 => "banana"),PHP这货居然把字符串"1"和整数1当成了同一条道上的兄弟。这隐秘的变身术,真是让人哭笑不得。

函数的“精粹”

PHP那函数写法,真是让人又爱又恨。函数名大小写不敏感,比如strlen和STRLEN其实是一码事。这设计得挺逗的。你永远猜不透同事会用啥风格命名函数。调试时,你发现调用没问题,可结果不对,最后才发现是大小写搞的鬼。

这事还得多说两句,PHP里的函数参数排法简直是个大坑。就拿strpos()来说,你得先写$haystack,再写$needle,这顺序跟in_array()反着来,让人看了直想骂娘。这设计,真是让人头都大了。

面向对象的“精粹”

PHP这东西,搞对象设计时,心里那叫一个纠结。类和方法的设计,还算中规中矩,可那魔术方法,简直让人又爱又恨。你说像那个__construct()啊、__destruct()啊、__get()啊、__set(),看起来挺高大上的,但要是用错了,调试过程那叫一个折磨人,简直想抓狂到把键盘砸了。

举个例子:

class User {

private $name;

这东西叫构造函数,一出生就得有个名字参数。

$this->name = $name;

这东西叫啥来着?得了,反正就是弄个啥东西,你叫它啥都行,反正就是得手一招,直接给你整出来。

if ($property == "name") {

return $this->name;

}

}

$user = new User("John");

echo $user->name;

这看起来挺顺眼?结果你一不小心把get()给写成_get()了,PHP那货愣是没给你报错,直接给你来个空空如也。你瞎忙活半天,最后才发现是方法名搞错了,这时候你是不是觉得自己智商有点感人?

错误处理的“精粹”

PHP那破错误处理系统,让人又爱又恨。它那错误报告等级多得跟啥似的,比如E_ERROR、E_WARNING、E_NOTICE啥的。你要是不小心把那错误报告等级调得太低,比如:

这代码搞的,啥提示都不显示,就只给我报了个错。

这时候,PHP悄无声息地忽略了所有那些NOTICE级别的错误。你调试了大半天,结果发现是变量没搞明白或者数组里的那个键根本没影儿。这时候,你心里肯定在骂自己,感觉自己像个白痴。

数据库操作的“精粹”

PHP跟数据库打交道,这感觉就像爱恨交加。那个mysql扩展,早就不流行了,现在咱们得用mysqli或者PDO。可这俩东西的设计,也是让人又爱又恨。比如说mysqli,它那面向对象和过程式风格混搭,简直让人头大。

这货连接数据库,本地地址,用户名,密码,数据库名,一套操作溜得飞起。

if ($mysqli->connect_error) {

哎呀妈这连接搞不定,直接来个狗带操作:“Connection failed: ”,然后把这$mysqli->connect_error给扔了。

$sql = "SELECT * FROM users";

这货执行了那啥SQL语句,结果直接就出来了。

if ($result->num_rows > 0) {

当每行数据被这条命令抓取过来的时候,{ }

兄弟,看这货,ID是啥的来着?$row["id"],名字?$row["name"],邮箱是啥的?$row["email"],还带换行的,真是够意思。

}

} else {

echo "0 results";

这看起来挺顺眼?结果你一不小心把$mysqli->query($sql)搞成了$mysqli->query($sql, MYSQLI_USE_RESULT),PHP竟然不闹腾,悄无声息地给你个空空如也的结果集。你一头雾水调试了老半天,最后发现是参数搞错了,这时你肯定觉得自己智商不够用,像个愣头青。

文件操作的“精粹”

PHP这东西对文件的操作,让人又爱又恨。它那读写文件的函数种类繁多,像是fopen啊、fread啊、fwrite啊、fclose啊之类的。可要是你一不小心搞错了文件模式,那可就尴尬了。

这货打开了个叫“test.txt”的文件,读模式来着。

fwrite($file, "Hello World");

fclose($file);

这时候,PHP这货愣是没给点错,它就那么默默地把fwrite()给无视了。你捣鼓了老半天,最后发现是文件模式搞错了,这时候你心里肯定在骂自己,感觉自己像个白痴。

项目实战:一个简单的用户管理系统

话说这么多,咱们来点干货。这不,最近我整了个小东西,一个用户管理系统,纯PHP加MySQL搞定的。功能,就那么几个,注册个号,登录一下,瞅瞅个人资料,简单不简单?你说简单,那可就错了,用PHP搞这事,简直让人又爱又恨,哭笑不得。

数据库设计

我们设计一个简单的用户表:

CREATE TABLE users (

这货是个ID,整数类型,自增长,关键得是主键。

这东西用户名长度得有50个字符,一个都不能少。

密码这东西,长度得有255个字符,一个都不能少。

);

这事听着挺容易?可你要是没注意把密码那栏的长度设置得短了,比如说只给VARCHAR(50)那么点空间,用户注册时要是输入了个超长密码,PHP可不会给你报错,它就那么悄无声息地给截了。等用户登录时发现密码不对劲,这时候你都得怀疑自己是不是脑袋进水了。

用户注册

我们实现用户注册功能。首先,我们写一个简单的HTML表单:

这货就是个注册表单,动作指向注册页面,提交方式是POST。

用户名输入框:<输入你的用户名,格式如下:<input type="text" name="username">,记得填!<br>

密码框:<输入密码区域,名字叫password><br>这东西得填对,别搞错了,不然就悲剧了。

这货是个注册按钮,点它就能加入我们。

</form>

我们写register.php来处理表单提交:

这货儿提交的用户名,直接就抓过来存了。

这密码,得先经过一道特殊处理,就相当于给它来个加密,保证安全。咱们把用户填的那密码,经过这么一操作,就能生成一个加密后的版本。

$email = $_POST['email'];

这代码块儿,往用户表里头塞数据,用户名、密码、邮箱,一个都不能少,直接往里头填,就这么简单。

这东西一运行,要真给整对了,那可就美了。

搞了个新记录,弄好了,没毛病。

哎呀妈这代码里头出了点岔子,瞧瞧这SQL语句,还跟个错别字似的,跟它来个亲密接触,这数据库还来个“哎呀我去”,直接把错误信息给甩出来了。

这看起来挺美?可要是你傻乎乎地把$username直接往SQL里一扔,啥过滤都没做,结果有人用' OR '1'='1'这招来玩儿,你的数据库就等着被黑。然后你费老鼻子劲调试,最后发现是SQL注入这茬儿,这时候你是不是觉得自己像个白痴?

用户登录

咱们搞定了用户登录那一套。<搞个表单,动作指向login.php,提交方式是post。>

这货是个登录按钮,点它就能进。

我们写login.php来处理表单提交:

这密码,直接从表单里抓了个现成的。

这东西就是从用户表里头,把那些名字跟输入的这东西对上的,全都捞出来。

这东西从那结果里掏出来一行数据,就那么简单。

密码校验成功,$password跟数据库里的密码对上了号。

echo "Login successful";

} else {

echo "Invalid password";

echo "User not found";

看起来很美对?

总结

PHP这东西,简直就是个“速成”神器,让你分分钟体验从新手到想放弃的全过程。变量、数组、函数、面向对象,还有那让人头大的错误处理和数据库操作,简直让人哭笑不得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值