php自学笔记
#1.初识
PHP是一种类似Python的弱类型语言,是一门服务器端的语言。全称:PHP:Hypertext Preprocessor,超文本预处理器,PHP文件可包含HTML,js代码。在服务器端执行返回纯HTML给浏览器。
#2.变量
必须以$开始,不用声明变量,在第一次赋值的时候创建变量,这点和Python很像,这可能就是这种弱语言类型的特点。作用域这点也要注意,在PHP代码中,函数外部定义的变量为全局变量,相应的,函数内定义的就是局部变量。外部的全局变量只能外部调用,函数内定义的只能函数内调用,(函数内调用全局变量用global关键字)
像这样:$GLOBALS[' 全局变量 ']
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
?>
此外,还有超级全局变量,顾名思义就是其作用域特别的大,有以下:
-
$GLOBALS
超级全局变量组,所有变量都被它所包括,正如上面的示例。
-
$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等
信息的数组。这个数组中的项目由 Web 服务器创建。请求的一些信息都在这里。
-
$_REQUEST
用于收集HTML表单提交的数据。
<html>
<body>
//action指定form提交的数据到哪里
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
-
$_POST
与request类似,只不过它是这样描述的:广泛用于搜集HTML表单信息,“method=post”。
-
$_GET
这个也是和post差不多,只不过指定的方法是:“method=get”。可接受url上传过来的参数。
-
$_FILES
-
$_ENV
-
$_COOKIE
-
$_SESSION
#3.两种输出方式(echo,print)
后者print我还是比较熟悉的,前者是我新见。两者主要的区别:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
#4.EOF说明
EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。以 <<<EOF 开始标记开始,以 EOF 结束标记结束, 必须后接分号。结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
像这样:
<?php
echo <<<EOF
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>
结果是把里面内容“原封不动”的保存,不解析里面任何的语法,只当成一个纯字符串。
#5.数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。这些都是许多语言都有的,可以说是编程语言的基石。我们只来看一下不一样的即可。var_dump() 函数可返回变量的数据类型和值。
像这样:var_dump()不仅会把数组解析出类型和值,连数组里面的都可以解析。
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
结果:有点像字典,键值对的形式。
array(3) {
[0]=>
string(5) "Volvo"
[1]=>
string(3) "BMW"
[2]=>
string(6) "Toyota"
}
#6.类型比较
虽然是弱语言吧,但还是要区别比较。松散比较(==),严格比较(===),松散只比数值,严格既比数值,也比类型。
#7.常量
常量是全局的,它不像变量那样作用域明显,它可被函数内调用。
使用define()函数,例如define(“HELLO”,“world”),此时echo HELLO,就会输出world
像这样:这是对大小写敏感的。
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting"
?>
#8.字符串
并置运算符其实就是一个小数点,用于连接字符串。strlen()求字符串长度,strpos()查找第一个匹配的字符串位置,这俩是常用的,更多的可以看PHP文档。
#9.运算符
具备大多数语言所共有的,也有自加自减之些的运算符。比较运算符中 <>和!= 都是不相等的意思,!==是绝对不相等。三元运算符,自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
**注意:**PHP_EOL 是一个换行符,兼容更大平台。
<?php
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
还有一个太空船操作符 <=> ,可能是长得像吧,哈哈,学名叫组合比较符,通过返回的数来判断大小。
- 如果
b, 则 $c 的值为 1。
- 如果
b, 则 $c 的值为 0。
- 如果
b, 则 $c 的值为 -1。
#.10if与else,switch
条件判断嘛,就是不同的条件来执行不同的功能。
<?php
$t=date("H");
if ($t<"10")
{
echo "Have a good morning!";
}
elseif ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
输出为have a good day,说明H大于等于10,小于20.
switch语句也很简单,就是比一般的if,else语句更具体,但有一点还是比较特别的。
像这样:
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?
上面的例子,答案很显而易见,会输出“你喜欢的颜色是红色”,然后就结束了,这是因为有break在起作用,若去掉break,则会一直向下运行直到遇见break才停下来。
#11.数组
数组是一个能在单个变量中存储多个值的特殊变量。count()可获得数组长度。
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值,有点像字典
- 多维数组 - 包含一个或多个数组的数组
遍历一般数组:循环下标取出。
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
遍历关联数组(字典):方便的取出 键 与 值。
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
数组排序:以下函数可实现。
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
#12.循环
- while - 只要指定的条件成立,则循环执行代码块
- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
- foreach - 根据数组中每个元素来循环代码块
#13.强大的函数
PHP真正的威力在于它的函数,超过1000个函数供你使用。有参数,也有返回值。
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
#14.魔术常量
虽说是常量,但他们的值是随着他们的位置改变的。
| LINE | 文件中的当前行号。 |
|---|---|
| FILE | 文件的完整路径和文件名。 |
| DIR | 文件所在目录。 |
| FUNCTION | 返回该函数被定义时的名字(区分大小写)。 |
| CLASS | 返回类的名字。 |
| TRAIT | Trait 的名字,优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。 |
| METHOD | 类的方法名。 |
| NAMESPACE | 当前命名空间的名称(区分大小写)。 |
#15.命名空间
PHP 命名空间可以解决以下两类问题:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。下面的例子就能体现这一点。
<?php
//创建空间Blog
namespace Blog;
class Comment { }
//非限定名称,表示当前Blog空间
//这个调用将被解析成 Blog\Comment();
$blog_comment = new Comment();
//限定名称,表示相对于Blog空间
//这个调用将被解析成 Blog\Article\Comment();
$article_comment = new Article\Comment(); //类前面没有反斜杆\
//完全限定名称,表示绝对于Blog空间
//这个调用将被解析成 Blog\Comment();
$article_comment = new \Blog\Comment(); //类前面有反斜杆\
//完全限定名称,表示绝对于Blog空间
//这个调用将被解析成 Blog\Article\Comment();
$article_comment = new \Blog\Article\Comment(); //类前面有反斜杆\
//创建Blog的子空间Article
namespace Blog\Article;
class Comment { }
?>
#16.对象
在oop(object-oriented programming 面向对象编程)中,对象是一个类的实例化,类中的属性和方法,都在实例化后赋予了对象。这里面的多态,继承,封装什么的,和Java一馍馍一样。析构函数与构造函数的功能正好相反,他是用来处理“清理善后”的工作。
这些就是PHP最基础的了,其实我感觉至少有三分之一,甚至更多,都是和java,c,py相似的,所以学下来也不是很难,当然,也可能是我学的不精,嘿嘿,接下来还有
PHP表单,PHPMysql,进阶,PHP与ajax,其他扩展。
先来看看PHP表单吧!