一、复合数据类型
1、方法、函数
有参函数
无参函数
2、作用域
全局变量和局部变量
全局变量不能直接在函数内使用,需要在函数内部使用时,需要global
可以看到,在php函数内部声明的变量只能在函数内部访问
3、数组
声明数组有两种方式:
$a=array('li'=>1,"12",[123,12,1]);
$b=['li'=>1,"12",[123,12,1]];
数组取值
将数组中的值一次性取出:用for循环或foreach
$a=array(1,"12",[123,12,1]);
$b=array('li'=>1,"12",[123,12,1]);
$c=[1,2,3];
$d=['lihua'=>'第一组','liqiang'=>'第二组','zhanghua'=>'第三组'];
//取key为数字的value
for($i=0;$i<count($a);$i++){
print_r($a[$i]);
echo "\n";
}
//取定义的key对应的value
foreach($a as $element){
print_r($element);
echo "\n";
}
foreach($b as $element=>$val){
print_r($element);
echo "\n";
print_r($val);
echo "\n";
}
最后的foreach输出的值
4、类
面向对象的编程语言有三大特性:封装、继承、多态
面向对象的封装特性:将类中的成员属性和方法内容细节尽可能地隐藏起来,确保类外部代码不能随意访问类中的内容。
面向对象的继承特性:使得子类可继承父类中的属性和方法,提高类代码的复用性。
面向对象的多态特性是最常用到的一种特性。所谓多态,是指同一个东西不同形态的展示。在继承过程中将父类中的方法重新定义。
PHP的封装
可使用 public、protected、private 来修饰对象的属性和方法。使用不同修饰符的属性和方法其可被访问的权限也不同:
public:可以在任何地方调用,如果在类中的属性和方法前面没有修饰符,则默认修饰符为 public。
protected:可在本类和子类中被调用,在其他地方调用将会报错。
private:只能在本类中被访问。
声明类
描述:php中类的定义都以class开头,后跟类名,然后加一个花括号。
花括号里是类的属性或者方法。
语法:class 类名{类内部的结构 }
class Person{
public $name='lihua';
public $sex='女';
function showself(){
echo $this->name;
}
}
类的实例化及属性方法调用
描述:创建一个类的实例,必须用new关键字
语法:$ duixiangming =new 类名();
举例:
class Person{
public $name;
protected $sex;
private $weight;
function __construct($name_f,$sex_f,$weight_f){
$this->name=$name_f;
$this->sex=$sex_f;
$this->weight=$weight_f;
}
function showself(){
echo $this->name;
}
}
$x=new Person('xiaoming','1',123);
echo $x->name; //可以调用
$x->showself();
echo $x->sex; //报错,因为受保护的属性只能被其自身及子类或父类访问
echo $x->weight; //报错,私有属性只能被自身访问
php中的继承
- 类的继承只能是单一继承,例如类C不能同时从类A和类B继承。
- 一个类可以继承于一个父类,同时使用一个或多个接口。类还可以直接继承于某个特定的接口。
- 类、类的属性和方法的访问都可以通过访问权限修饰符进行控制。访问权限修饰符放在属性和类的前面,public表示公有属性或方法,private表示私有属性或方法,protected表示保护属性或方法。
- 关键字final放在特定的类前面,表示此类不能再被继承。final放在某个类方法前面,表示此方法不能在继承后被“重写”或重新定义
举例
class Person{
public $name;
protected $sex;
private $weight;
function __construct($name_f,$sex_f,$weight_f){
$this->name=$name_f;
$this->sex=$sex_f;
$this->weight=$weight_f;
}
function showself(){
echo $this->name;
echo "这是Person类的输出";
}
}
//继承
class Teacher extends Person {
function show(){
echo $this->sex;
echo "这是老师类的输出";
}
}
$teacher=new Teacher('张老师','男',180);
$teacher->showself();
$teacher->show();
echo "\n";
print_r($teacher);
php中多态
多态就是同样的方法名和参数名实现不同的功能。
接口是一种成员属性全部为抽象或常量的特殊抽象类
-
interface 接口名称{}
- 接口只能定义常量和方法。
- 接口的方法是抽象的,且必须在实现它的类中重定义,否则会报错。
- 接口的方法只能是public(默认),且没有方法体(只能定义这个方法,不能有内容{…})。
2.abstract class 抽象类名称{}
- 抽象类只能被继承,不能实例化。
- 抽象方法必须在子类实现,否则会报错。
- 抽象方法只能定义,不能有内容(没有方法体{…}这部分,定义了会报错)。
- 实现抽象方法的子类方法访问控制权限不能低于抽象方法原定义,即抽象方法为public,子类可为public,protected,private。
interface Common
{
function show();
}
class Person
{
public $name;
public $age;
}
class Teacher extends Person implements Common
{
function show()
{
// TODO: Implement show() method.
echo "我是实现Common接口后实现的show方法\n";
}
}
$teacher = new Teacher();
$teacher->name = "张老师";
$teacher->age = 23;
$teacher->show();
print_r($teacher);
php中的类常量与静态变量
描述:类常量由关键词const声明,静态变量用关键词static声明
由const声明的类常量不允许发生改变。
由static声明的静态变量,仅在类被声明的时候执行一次,但可以修改。
这两者的调用方式都是::调用。
这两者调用的时候可以不实例化直接用类名调用。
class 类名{
const 类常量(没有$开头)=简单值;
static 静态变量名(有$开头)=简单值;
}
有些项目代码将类代码统一放在一个.php文件,调用的时候用文件包含函数,相当于将调用的文件复制了一下。文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行
文件包含的4种函数:include、require、include_once、require_once
require() // 程序一运行文件便会包含进来,若包含文件不存在产生致命错误,程序终止运行
require_once() // 如果一个文件已经被包含过,则不会在包含它
include() // 只在执行到此函数时才去包含文件,若包含的文件不存在产生警告,程序继续运行
include_once() // 如果一个文件已经被包含过,则不会在包含它
二、定义常量的方法
两种方式
define(message,'abc'); //php5.3之前
const m='tangl';
三、三元运算符
条件判断的一种方式
语法:判断条件?满足条件输出:不满足条件输出;
$a=1;
$b=2;
echo $a>$b?'a大于b':'a不大于b';
四、标记
短风格
<? echo 'hello';?>
脚本风格
<scrip language="php">php代码</script>
ASP风格
<% echo "PHP 代码"; %>
从PHP7版本开始,PHP标记风格只支持 <?php echo "PHP 代码"; ?> 格式