歷史謎案
你有沒有想過,php和js——除了一個運行在前端,一個在后端,還有什么?
來看一個例子:
var b = 1;
function fun(){
b = 2;
}
fun();
console.log(b);
會打印出來什么?不用想了肯定是2。
但是問題就來了,怎么是2???你用了這么多年js你難道沒有發(fā)現(xiàn)這個問題嗎。
你為什么能在函數(shù)體內(nèi)去修改,全局中變量的值??
看下php
$v = 1;
function getV(){
$v = 10;
}
getV();
print($v)
這里打印出來1。
證明了一件事:js中變量是沒有塊作用域的。塊作用于就是{}括號里面的東西,沒有塊作用域,變量跟全局的就沒什么區(qū)別。能明白嗎,整個js,無論在什么地方,你都有可能會修改到全局,污染全局的數(shù)據(jù)。這可不是鬧著玩的。
php是較為嚴謹?shù)木幊陶Z言,所以,不存在這種情況。
我們太需要對變量進行規(guī)范了。
雖然es6中誕生了const和let,但是說實話,這還遠遠不夠。。
php非常依賴方法
ok,我們知道了在php中,變量存在作用域。
那么他的聲明變量或者數(shù)組的寫法有什么區(qū)別呢?
php無論是聲明產(chǎn)量還是創(chuàng)建數(shù)組,都是通過方法完成的,它不像js那么隨意,一個var arr=[] 就能創(chuàng)建數(shù)組,它創(chuàng)建數(shù)組要通過$arr = array()完成
$array = array("java","php","nodejs");
print_r($array);
echo "<br/>";
echo $array[0];
echo "<br/>";
$array2 = array("key1"=>"java","key2"=>"php");
echo $array2["key1"];
我知道這些有什么用?
你可以發(fā)現(xiàn),從第一章到第二章,全他媽是在講理論的東西。無非你就是想告訴我,js和php寫法不一樣,運行的地方不一樣。有什么用?
我還是一樣不會寫接口!
別急,咱們慢慢來,先來了解一些基礎的知識,由淺入深。如果你不了解這些區(qū)別的話,后面的東西我保證你會看懵,你一旦懵了心態(tài)就炸了,就不想學了,這就跟你為什么不會數(shù)學和英語是一個道理。
就跟你去看病,大夫說了一堆你聽不懂的,但是最后告訴你需要打針輸液的時候是一個道理。
你不知道為什么病的,下次你還會病。