PHP学习笔记——环境安装/基础知识
参考资料:http://www.php.cn/course/2.html
编程词典(方便查找某个函数或者知识点):http://www.php.cn/dic/29.html
更多请查看PHP参考手册,PHP官方文档
一.环境安装:http://www.php.cn/code/25.html
二.基础知识(只记录大致功能,具体使用方法以其原理查看资料文档):
0.php的代码部份全部要用半角的英文、很多人容易写成全角的英文和符号造成PHP代码报错。
1. echo显示命令:echo "<h1>你好,世界!<h1>";
2.注释:同C++,//单行,/*多行*/
3.变量:以$开头,不区分大小写,无需声明类型直接赋值创建(弱类型语言),
4.变量作用域:
全局变量:函数外定义的变量,可以被脚本中的任何部分访问(注意函数要访问全局变量的时候要加global 关键字,不然就不知它是全局变量还是该函数要定义的局部变量了)
局部变量,在函数里面定义的变量,只在该函数内访问。(可以用static声明局部变量防止该变量被删除)
<?php
header("Content-type:text/html;charset=utf-8");
$x = 5; // 全局变量function myTest()
{$y = 10; // 局部变量echo "myTest()局部变量 y 为: $y";echo "<br>";//函数访问全局变量方法一global $x;echo "全局变量 x 为: $x";echo "<br>";//函数访问全局变量方法二echo "全局变量 x 为: ";echo $GLOBALS['x'];echo "<br>";// 在函数内部, 声明全局变量,但不能直接赋值...global $c, $d;$c = '函数内可以';$d = '声明全局变量';}myTest();
echo $c . $d;
echo "<hr>";function test2()
{//加上static的局部变量,函数调用完后不会被删除。static $x = 0;echo $x;$x++;
}
test2();
test2();
test2();
test2();
?>
5.输出语句:echo 和 print 语句
6.数据类型:Integer(整型)Float(浮点型)Boolean(布尔型)String(字符串)Array(数组)Object(对象)NULL(空值)
【var_dump() 是一个函数。向括号()中间插入变量。这个函数,会打印出来数据类型,还会对应显示变量的长度和值。
empty()可以向括号中间传入一个变量。这个变量的值如果为false或者为null的话,返回true。
isset()可以向括号中间传入一个或者多个变量,变量与变量间用逗号分开。只要有有一个变量为null,则返回false。否则,则返回true。
unset()这个函数的功能是毁掉变量。unset(变量)括号中间插入想要毁掉的变量名,这个变量就会被毁掉。】
7.字符串:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。
【并置运算符.(点)用于把两个字符串值连接起来。例如:echo $txt1 . " ---" . $txt2;
strlen() 函数返回字符串的长度(字符数),注意:在UTF-8下中文占三个字符数。提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
】
8.常量: define("GREETING", "Welcome to PHP.cn!"); echo GREETING;
【无需$开头,默认全局,函数访问无需加global。默认对大小写敏感,可以define("GREETING", "Welcome to PHP.cn!",true);创建对大小写不敏感的常量
内置常量了解一下】
9.运算符
算术运算符:+ - * / %(取余)
赋值运算符:= .=($x .= $y即$x = $x . $y) 算术运算符=
自增/自减运算符:++ --(用法同C++)
比较运算符:> < >= =< == ===(要求值和类型都要相同) != (也可以写成<>) !==(值和类型都不能相等)
逻辑运算符:&&(也可以用and) ||(也可以用or) ! xor(异或,一真一假的时候才返回true)
数组运算符:+(联合但不覆盖重复的部分)== ===(要求值、顺序和类型都要相同) != (也可以写成<>) !==(值、顺序和类型都不能相等)
三目运算符:(expr1)?(expr2):(expr3); //表达式1?表达式2:表达式3 (用法同C++)
10.if语句 ------同C++
11.switch -------同C++
<?phpheader("Content-type:text/html;charset=utf-8"); //设置编码//得到今天是星期几的英文简称$day = date('D');switch($day){//拿学校举例,我们让星期一、二、三是校长日case 'Mon':case 'Tue':case 'Wed':echo '校长日';break;case 'Thu':echo '星期四';break;case 'Fri':echo '星期五';break;default:echo '周末,周末过的比周一到周五还要累<br />';}
12.数组
【只要事先声明下标,数组下标可以不从0开始。
count($变量) 函数用于返回数组的长度(元素数)
可以用for循环遍历索引数组
可以用foreach循环遍历关联数组、下标不连续数组
数组排序:升序(数字从小到大,字母A-Za-z),方法:升序sort()、降序rsort()、根据值asort()、arsort()、根据键ksort()、krsort()
多维数组了解一下】
<?php
header("Content-type:text/html;charset=utf-8"); //设置编码
$array = array(100, 1.34, true, "PHP中文网");
echo '<pre>'; //echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰
var_dump($array);
echo '<pre/>';
echo "<hr>";//关联数组,用[]创建数组
$arr = ['name' => 'Tom','age' => '18','gender' => 'male',
];
echo "<pre>";
var_dump($arr);
echo "</pre>";
echo "<hr>";//用for循环遍历索引数组
$arr = array('tom', 'andy', 'jack');
$arrlength = count($arr);
for ($x = 0; $x < $arrlength; $x++) {echo $arr[$x];echo "<br/>";
}
echo "<hr>";//用foreach循环遍历关联数组、下标不连续数组
$arr = ['name' => 'Tom','age' => '18','gender' => 'male',
];
foreach ($arr as $key => $value) {echo $key . ": " . $value . "<br />";}
13.循环while、do...while、for语句 ----同C++
【还有foreach语句】
<?php
//乘法口诀表
for ($i = 1; $i < 10; $i++) {//1x1=1,2x2等于4,所以第二次循环的最大值为$i的值,因此$j=1, $j在循环自加的过程当中,只能够小于等于$ifor ($j = 1; $j <= $i; $j++) {// 1 x 2 = 2 2 x 2 = 4啦echo $j . 'x' . $i . '=' . ($i * $j) . ' ';}echo '<br />';}
14.超全局变量:通常是预定义变量,全部作用域中都可用,在函数或方法中无需执行 global 。
· $GLOBALS
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。函数内用$GLOBALS['x']访问全局变量x
· $_SERVER
$_SERVER 是一个包含了诸如当前脚本文件名,所在服务器ip,端口号,通信协议,请求时间戳,引导用户代理到当前页的前一页的地址等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
· $_REQUEST
PHP $_REQUEST 用于收集HTML表单提交的数据。
· $_POST
$_POST 变量用于收集来自 method="post" 的表单中的值
· $_GET
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多100个字符)。
· $_FILES
· $_ENV
· $_COOKIE
· $_SESSION
15.魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
__LINE__:文件中的当前行号。
__FILE__:文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__:文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
__FUNCTION__:函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__:类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
__TRAIT__:Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
__METHOD__:类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__:当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
16.命名空间:解决命名冲突
【要写在文件最开头位置,除了声明编码方式declare(encoding='UTF-8'); ,命名空间前面不能有其他种类的语句
命名空间可以分层次(子命名空间):namespace MyProject\Sub\Level;
在文件系统中访问一个文件有三种方式:
1. 相对文件名形式如foo.txt。它会被解析为 currentdirectory/foo.txt,其中 currentdirectory 表示当前目录。因此如果当前目录是 /home/foo,则该文件名被解析为/home/foo/foo.txt。
2. 相对路径名形式如subdirectory/foo.txt。它会被解析为 currentdirectory/subdirectory/foo.txt。
3. 绝对路径名形式如/main/foo.txt。它会被解析为/main/foo.txt。
命名空间同理:
<?php
//file1.php
namespace Foo\Bar\subnamespace;const FOO = 1;
function foo()
{echo "Foo\Bar\'namespace\'foo()";echo "<br>";
}
class foo
{public static function staticmethod(){echo "Foo\Bar\'namespace\'foo::staticmethod";echo "<br>";}
}
<?php
namespace Foo\Bar;include 'file1.php';const FOO = 2;
function foo()
{echo "Foo\Bar\'foo()";echo "<br>";
}
class foo
{public static function staticmethod(){echo "Foo\Bar\'foo::staticmethod";echo "<br>";}
}/* 非限定名称 */
foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。resolves to class Foo\Bar\foo, method staticmethod
echo FOO; // resolves to constant Foo\Bar\FOO
echo "<br>";/* 限定名称 */
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
// 以及类的方法 staticmethod
echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
echo "<br>";/* 完全限定名称 */
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
echo "<br>";
命名空间和动态语言特征
namespace关键字和__NAMESPACE__常量
使用命名空间:别名/导入,使用use操作符导入/使用别名
使用命名空间:后备全局函数/常量
全局空间
命名空间的顺序
】
17.面向对象
【类、对象、成员变量、成员函数、构造函数、析构函数、继承、父类、子类、访问控制、多态、重载、抽象、封装
构造函数:void __construct ([ mixed $args [, $... ]] )
析构函数:void __destruct ( void )
继承和方法重写:
<?php
header("Content-type:text/html;charset=utf-8"); //设置编码
//加上下面三行可以防止页面出现Warining和Noteic警告
ini_set("display_errors", 0);
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING);
class Site
{/* 成员变量 */public $url;public $title;/* 成员函数 */public function setUrl($par){$this->url = $par;}public function getUrl(){echo $this->url . "<br/>";}public function setTitle($par){$this->title = $par;}public function getTitle(){echo $this->title . "<br/>";}//构造函数//下面一行的参数1和参数2没有值,会出现Warning,可以写成// public function __construct($par1 = '', $par2 = '')public function __construct($par1, $par2){$this->url = $par1;$this->title = $par2;}//析构函数public function __destruct(){print "销毁 " . $this->title . "<br>";}
}// 调用成员函数,设置标题和URL
$php = new Site;
$php->setTitle("php中文网");
$php->setUrl('www.php.cn');// 调用构造函数,设置标题和URL
$taobao = new Site('www.taobao.com', '淘宝');// 调用成员函数,获取标题和URL
$php->getTitle();
$php->getUrl();
$taobao->getTitle();
$taobao->getUrl();// 继承:子类扩展站点类别
class Child_Site extends Site
{public $category;public function setCate($par){$this->category = $par;}public function getCate(){echo $this->category . "<br/>";}//方法重写:重写父类的方法public function getUrl(){echo "网址:";echo $this->url . "<br/>";}
}
echo "<hr>";
$google = new Child_Site;
$google->setTitle("Google 搜索");
$google->setUrl("www.google.com");
$google->setCate("搜索引擎");
$google->getTitle();
$google->getUrl();
$google->getCate();
访问控制:PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
· public(公有):公有的类成员可以在任何地方被访问。(如果用 var 定义,也被视为公有。)
· protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
· private(私有):私有的类成员则只能被其定义所在的类访问。
接口:使用接口(interface),可以指定某个类必须实现哪些方法(可以直观看出类肯定会实现的部分功能),但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
<?php
// 声明一个'SetAndShowArray'接口
//加上下面三行可以防止页面出现Warining和Noteic警告
ini_set("display_errors", 0);
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING);
interface SetAndShowArray
{public function setArray($name, $var);public function showArray($template);
}
// 实现接口
class Template implements SetAndShowArray
{private $vars = array();public function setArray($name, $var){$this->vars[$name] = $var;}public function showArray($template){foreach ($this->vars as $name => $value) {echo $name . "=>" . $value . "<br>";}}
}
$arr = new Template();
$arr->setArray("key1", "value1");
$arr->setArray("key2", "value2");
$arr->showArray();
常量:
<?phpclass MyClass{const constant = '常量值';function showConstant() {echo self::constant . "<br/>";}}echo MyClass::constant . "<br/>";$classname = "MyClass";echo $classname::constant . "<br/>"; // 自 5.3.0 起$class = new MyClass();$class->showConstant();echo $class::constant . "<br/>"; // 自 PHP 5.3.0 起?>
抽象类:抽象类不需要写具体的功能实现,子类继承的时候再实现功能,对于子类功能各不相同的情况下,父类就不必写具体的功能实现,直接写成抽象类,然后子类继承抽象类,能直观看出子类具有抽象类的特征,是一种提示。(其实完全不用抽象类也可以,只是某些情况下,抽象类更加简便符合逻辑。)
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
参考:http://www.runoob.com/php/php-oop.html 抽象类部分
static关键字:声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
final关键字:PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
调用父类构造方法:PHP 子类会继承父类的构造方法,但是重写子类构造方法的时候不会自动调用父类的构造方法,需要在子类的构造方法中调用 parent::__construct()。
】
PHP学习笔记——环境安装/基础知识相关推荐
- 《Java并发编程实践》学习笔记之一:基础知识
<Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念: (2)进程:是一种活动,它是由一个动作序列组成 ...
- 前端学习笔记(js基础知识)
前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- JAVA学习笔记(1)【基础知识】
JAVA学习笔记DAY_1 提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正! 文章目录 JAVA学习笔记DAY_1 前言 一.Java语言未来的 ...
- php百分比乘加,PHP学习笔记第一篇 基础知识
基础知识 我将php语言学习里面最最基础的部分,需要第一个学的,必须牢牢掌握的,归类到一起. 大纲 1.数据类型 2.变量 3.常量 4.操作符 5.流程控制 6.数组 7.字符串操作 8.正则 基础 ...
- 【学习笔记】网络安全基础知识总结
网络安全基础知识总结 前言 一.网络安全概述 1.1 引言 1.2 密码学的发展 1.3 密码学基础 1.4 对称密码 1.4.1 数据加密标准DES 二.数论知识 2.1 数论基础 2.2 有限域 ...
- JS学习笔记二——JavaScript 基础知识
JavaScript 基础知识 一.JavaScript 变量 二.JavaScript 的输出 三.JavaScript 运算符 四.结语 一.JavaScript 变量 变量是指在程序运行过程中, ...
- 网络通信学习笔记之——计算机网络基础知识
一.计算机网络基础知识 1.什么是计算机网络 把分布在不同地理位置的计算机与专门的网络设备用通信线路互相连成一个规模大.功能强的系统, 从而使众多计算机可以方便地互相传递信息.共享软件.硬件.数据 ...
- 音视频学习笔记1--音视频基础知识(1)
音视频基础知识 1 音视频开发是什么? 2 音视频数据处理流程 2.1 音视频数据采集 2.2 封装与解封装 2.3 音视频输出 2.4 音视频同步 3 视频中的基础概念 3.1 视频码率 3.2 视 ...
最新文章
- 可编程led灯带原理_88张图搞定层板灯带的设计、安装、收口及检修!
- 单模光电转换器怎么接_行业观察 | 硅基光电子与微电子单片集成研究进展
- log nginx 客户端请求大小_nginx
- oracle中的merge into用法解析
- 六、九大隐式对象(JSP的9大内置对象)
- php 处理tiff,TIFF图像文件(五):LZW的PHP应用
- console连接h3c s5500_h3c console连接方法
- 什么,双非学渣唯一的出路是打比赛?
- java多线程编程核心技术 2
- 一个人喝酒的时候看什么比较应景且下酒?
- ubuntu 12.04 源码安装 Xen 4.2
- 【Linux】04 软链接和硬链接
- InnoDB存储引擎概念与原理解析
- android版身份证号码校验
- torch.randn用法以及小案例
- 这所211怒将自己学生告成老赖:90后校友承诺捐母校1100万未兑现
- 写博客有什么意义以及为什么?
- 分析便宜云主机价格低的因素
- 真正的手机密码大全!(完整版)(转)
- javascript制作gif动图----gif.js
热门文章
- [ACNOI2022]高中数列题
- C语言时间动态密码算法,GMT 0021-2012 动态口令密码应用技术规范.pdf
- C++ 自创钉钉直播刷赞器
- 利用软碟通制作U盘安装Ubuntu16.04
- turtle_如何绘制菱形
- 【妄言集】 1Bit距离
- 防爆定位信标与防爆定位基站有什么区别?
- android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
- 疫情之下,零售企业不该只是为了 “ 活 ” !
- 中国汽车电子导航行业应用前景及投资需求预测报告(新版)2022-2027年