PHP自学笔记

555 阅读6分钟

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';
?>

还有一个太空船操作符 <=> ,可能是长得像吧,哈哈,学名叫组合比较符,通过返回的数来判断大小。

  • 如果 a >b, 则 $c 的值为 1
  • 如果 a ==b, 则 $c 的值为 0
  • 如果 a <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 命名空间可以解决以下两类问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。下面的例子就能体现这一点。
<?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表单吧!