本文适合阅读用户

  1. 有其他语言基础的童鞋
  2. 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里
  3. 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本《php从入门到放弃》,观你根骨清奇10两银子卖给你如何)

看完本文后你会收获到什么

  1. php的变量的定义,使用
  2. 函数的定义,使用,传递参数
  3. 数组的定义,调用,常用方法,使用场景
  4. php中循环,判断,选择结构的语法
  5. 类的定义,成员变量和成员函数的定义和使用

相信我,认真看完本文,你就已经掌握了php常用的语法了,足以进行一些常规的开发,剩下的可以用到再学,避免在学了忘学了忘的语法坑中沉迷太久(๑•̀ㅂ•́)و✧

用php导演一场情景剧

这就是今天的目的,假设我们已经搭建好了环境(下一节会讲),现在开始进行 编码 创造世界。

首先定义一下我们的题目,myphp

//定义我们的题目
$title = "myphp";

php定义变量用$符号,php是弱类型变量语言,不区分变量的类型,""和它里边内容在一起表示一个字符串。 另外//表示注释,就是解释性的话,并不会作为代码运行

//这个方法用来输出
function show($str)
{
echo $str . "<br>";
}

再定义一个方法(也叫函数,只是叫法不一样而已啦),定义方法用function关键字,括号里的是参数,直接用变量表示就可以,在调用的时候接收调用时传来的参数

echo是php自带的输出方法,没有括号是因为它比较特殊,可以先不管,会用就行

.是php中字符串拼接的符号,<br>是html中的换行符,为了让输出更好看

//方法直接调用就好
show("hello " . $title);

输出如下图

//定义发生异常时触发的函数
function error($str)
{
echo "{$str}<br>";
exit();
}

在""双引号内,可以直接用花括号包裹起来一个变量,这样在被调用的时候变量就会直接在字符串中替换为变量的值,单引号不可以

exit()方法让整个程序结束

//用[]可以直接创建一个空的数组,然后一一赋值
$person1 = [];
$person1['name'] = '高富帅';
$person1['sex'] = '男'; //也可以直接创建一个有值的数组
$person2 = ['name' => '白富美', 'sex' => '女'];
//这是一个二维数组,也可以用同样的方式创建更多维的数组
$persons = [$person1, $person2];

既然是情景剧,得有个男女主角呀,打印出来看看这个二维数组,发现下标是从0开始的,不要奇怪所有编程语言都是这样的



接下来定义一个类,类可以暂时理解为一些数据和方法的集合,也就是我们的情景剧啦

class MyPhp
{
}

定义类用class关键字,空格后是类的名字,注意只能是英文字母或者下划线_开头

情景剧不能什么都没有啊,我们再给它定义一些必要的成员变量和成员方法

class MyPhp
{
//表示我们的演员们
public $actors = null;
//自带bgm的情景剧
public $music = '我心永恒'; public function __construct()
{
$this->start();
} public function start()
{
$time = time();
show("时间:{$time}");
$date = date('Y-m-d h:m:s', $time);
show("哦~一般人还是看日期好一点 {$date}");
show("播放片头曲~~{$this->music}");
}
}
  1. 成员变量:成员变量直接用$符号声明就可以,public private protected 是成员变量的访问控制权限(同样适用于成员方法),分别表示共有,私有,受保护的,null是php里的空指针的关键字
  2. 成员方法:
    1. 有一些自带的成员方法,比如构造函数__construct,php中__开头(两个下划线)的函数都是默认自带的函数,__construct是构造函数,初始化一个类对象的时候会调用这个方法
    2. 可以自己定义成员方法,如start这个方法,定义方法和普通方法一样,控制权限和成员变量一样也是public private protected三个
    3. 调用成员变量,如$this->music,注意此时成员变量不要加$符号。调用成员方法,如$this->start()
  3. 时间和日期:time()方法获取一个当前的时间戳,date()方法接受两个参数,第一个是一个字符串表示格式化格式,第二个参数是一个时间戳,返回格式化之后的时间
    //定义一个方法,让演员加入进来
public function actorJoin($actorlist)
{
//我们判断演员是一个数组并且有两个人才可以,否则男女主角肯定有一个人没来或者第三者插足了
if (is_array($actorlist) && count($actorlist) == 2) {
$this->actors = $actorlist;
} else {
error('还有演员没有就位');
}
}

is_array()方法判断参数变量是否是数组

count()方法返回参数数组的长度

if(){}else{}结构是条件语句语法,括号内的判断语句如果成立,程序运行if下边大括号内的内容,否则运行else下大括号的内容

    //情景剧一开始们,演员得自我介绍一下吧,流程不能省
public function introduce()
{
if (empty($this->actors)) {
error('大家好我是导演,男女主角偷偷约会还没结束,今天可能来不了了');
} foreach ($this->actors as $actor) {
$intro = "我是{$actor['name']},";
switch ($actor['sex']) {
case '女':
show($intro . "我是女主角。");
break;
case '男':
show($intro . "我是男主角。");
break;
default:
show($intro . "抱歉,我不知道我什么性别。");
break;
}
}
}
  1. empty()函数判断数组是否为空,空返回true,也就是正确的意思,此处没有else,代表如果不满足if的条件,程序直接往下走,不运行大括号内的代码。
  2. foreach循环遍历数组,foreach($arr as $val),就是说对把$arr的所有成员依次赋值给$val,循环的次数就是$arr的长度
  3. switch语句针对同一地方不同值进行选择,可以避免多次if else,性能和可读性也更好
    1. switch后跟随的括号表示选择的变量
    2. case后的值和冒号后的代码,表示对应值和要运行的代码,注意要添加break,表示跳出本次判断,不然代码会继续往下运行
    3. defaul表示没有满足以上规定的case的时候,就运行default的代码
    //表演开始啦
public function action()
{
if (empty($this->actors)) {
error('演员临时有事,谢谢大家捧场');
}
//这是我们的剧本
$play = array();
$play[] = "{$this->actors[0]['name']} 和 {$this->actors[1]['name']} 在街边相遇";
$play[] = "{$this->actors[0]['name']} 深情脉脉的看着 {$this->actors[1]['name']}";
$play[] = "以下省略一万字,请自行脑补......";
$play[] = "全剧终";
foreach ($play as $key => $val) {
show("第{$key}幕");
show($val);
}
}
//不能草草结束,补个片尾曲
public function end()
{
show('片尾曲,撒花完结');
}
  1. array()函数会返回一个数组,如果没有参数就是一个空数组,也是创建数组的一个方式
  2. $this->actors[0]['name'],返回的是$this->actors的第一个成员的key为name的值
  3. foreach循环的第二种方式,as后边如果是 $key=>$val 这种,就会把数组的键赋值给$key,值赋值给$val,比上一种多了key可以使用

    好啦,万事俱备,现在让它运行起来吧
$myphp = new MyPhp();
$myphp->actorJoin($persons);
$myphp->introduce();
$myphp->start();
$myphp->action();
$myphp->end();

new MyPhp()会创建一个MyPhp类型的类对象,让一个变量指向这个对象,就可以对这个对象的成员变量和成员方法进行调用和改动了。

看看在浏览器上的输出



改一改在命令行里让它动态跑一下看效果(怎么弄的不重要)

好啦,回顾一下文章开头的你会收获到什么,你都学会了吗?

不要急,下一节会讲搭建php环境,你就可以自己演个情景剧啦

附:全部代码

<?php
//定义变量用 $ 符号
//php是弱类型变量语言,不区分变量的类型
//字符串 被""包围的部分就是字符串
$title = "myphp"; //定义方法 用function关键字
//括号里的是参数,直接用变量表示就可以,在调用的时候接收调用时传来的参数
//.是php中字符串拼接的符号
function show($str)
{
echo $str . "<br>";
} //方法直接调用就好
show("hello " . $title);
//exit()方法让整个程序结束
//在""双引号内,可以直接用花括号包裹起来一个变量,这样在被调用的时候变量就会直接在字符串中替换为变量的值,单引号不可以哦
function error($str)
{
echo "{$str}<br>";
exit();
} //用[]可以直接创建一个空的数组,然后一一赋值
$person1 = [];
$person1['name'] = '高富帅';
$person1['sex'] = '男'; //也可以直接创建一个有值的数组
$person2 = ['name' => '白富美', 'sex' => '女'];
//这是一个二维数组,也可以用同样的方式创建更多维的数组
$persons = [$person1, $person2]; //定义类用class关键字
class MyPhp
{
//成员变量直接用$符号声明就可以
//public private protected 是成员变量的访问控制权限
//null是php里的空指针的关键字
public $actors = null;
public $music = '我心永恒'; //php中__开头(两个下划线)的函数都是默认自带的函数
//__construct是构造函数,初始化一个类对象的时候会调用这个方法
public function __construct()
{
$this->start();
} public function start()
{
//time()方法获取一个当前的时间戳
//date()方法接受两个参数,第一个是一个字符串表示格式化格式,第二个参数是一个时间戳,返回格式化之后的时间
$time = time();
show("时间:{$time}");
$date = date('Y-m-d h:m:s', $time);
show("哦~一般人还是看日期好一点 {$date}");
//$this->music 调用成员变量,注意此时成员变量不要加$符号
show("播放片头曲~~{$this->music}");
} //演员加入
public function actorJoin($actorlist)
{
//is_array()方法判断参数变量是否是数组
//count()方法返回参数数组的长度
//if(){}else{}是条件语句语法,括号内的判断语句如果成立,程序运行if下边大括号内的内容,否则运行else下大括号的内容
if (is_array($actorlist) && count($actorlist) == 2) {
$this->actors = $actorlist;
} else {
error('还有演员没有就位');
}
} public function introduce()
{
//empty()函数判断数组是否为空,空返回true,也就是正确的意思
//此处没有else,代表如果不满足if的条件,程序直接往下走,不运行大括号内的代码。
if (empty($this->actors)) {
error('大家好我是导演,男女主角偷偷约会还没结束,今天可能来不了了');
}
//foreach循环遍历数组,foreach($arr as $val),就是说对把$arr的所有成员依次赋值给$val,循环的次数就是$arr的长度
foreach ($this->actors as $actor) {
$intro = "我是{$actor['name']},";
//switch语句针对同一地方不同值进行选择,可以避免多次if else,性能和可读性也更好
//switch后跟随的括号表示选择的变量,case后的值和冒号后的代码,表示对应值和要运行的代码,注意要添加break,表示跳出本次判断,不然代码会急需往下运行
//defaul表示没有满足以上规定的case的时候,就运行default的代码
switch ($actor['sex']) {
case '女':
show($intro . "我是女主角。");
break;
case '男':
show($intro . "我是男主角。");
break;
default:
show($intro . "抱歉,我不知道我什么性别。");
break;
}
}
} public function action()
{
if (empty($this->actors)) {
error('演员临时有事,谢谢大家捧场');
}
//array()函数会返回一个数组,如果没有参数就是一个空数组,也是创建数组的一个方式
//$this->actors[0]['name'] 返回的是$this->actors的第一个成员的name
$play = array();
$play[] = "{$this->actors[0]['name']} 和 {$this->actors[1]['name']} 在街边相遇";
$play[] = "{$this->actors[0]['name']} 深情脉脉的看着 {$this->actors[1]['name']}";
$play[] = "以下省略一万字,请自行脑补......";
$play[] = "全剧终";
//foreach循环的第二种方式,as后边如果是 $key=>$val 这种,就会把数组的键赋值给$key,值赋值给$val,比上一种多了key可以使用
foreach ($play as $key => $val) {
show("第{$key}幕");
show($val);
}
} public function end()
{
show('片尾曲,撒花完结');
} } $myphp = new MyPhp();
$myphp->actorJoin($persons);
$myphp->introduce();
$myphp->start();
$myphp->action();
$myphp->end();

三篇文章带你极速入门php(一)之语法的更多相关文章

  1. 三篇文章带你极速入门php(三)之php原生实现登陆注册

    看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...

  2. 三篇文章带你极速入门php(二)之迅速搭建php环境

    前言 今天讲一下php在windows,mac,linux上的集成环境搭建,目标是简单快速,环境这个事得对号入座,windows用phpstudy,mac用mamp,linux用lnmp一键安装,直接 ...

  3. 三篇文章了解 TiDB 技术内幕 —— 谈调度

    任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都 ...

  4. 三篇文章了解 TiDB 技术内幕 - 说存储(转)

    引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的支撑.这一领域经过了几十年的发展,不断的有新的进展. 很多人用过数据库,但是很少有人实现 ...

  5. jq最新前三篇文章高亮显示

    /*---------最新前三篇文章高亮显示-------------*/ function latest(){ var color_arr=new Array( "blue", ...

  6. 两篇文章带你走入.NET Core 世界:Kestrel+Nginx+Supervisor 部署上云服务器(二)

    背景: 上一篇:两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一) 已经交待了背景,这篇就省下背景了,这是第二篇文章了,看完就木有下篇了. 直接进 ...

  7. 三篇文章了解 TiDB 技术内幕——说计算

    在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE ...

  8. TIDB4 —— 三篇文章了解 TiDB 技术内幕 - 谈调度

    原文地址:https://pingcap.com/blog-cn/tidb-internal-3/ 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 K ...

  9. 两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)

    背景: 上一篇:ASP.Net Core on Linux (CentOS7)共享第三方依赖库部署 已经交待了背景,这篇就省下背景了. 折腾的过程分两步: 第一步是:本机跑虚拟机部署试一下: 第二步是 ...

随机推荐

  1. Mysql 插入中文错误:Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'course' at row 1

    create table my_user (    id tinyint(4) not null auto_increment,    account varchar(255) default nul ...

  2. Dubbo——基于Zookeeper服务框架搭建及案例演示

    一.了解SOA微服务架构 在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来 ...

  3. How to Repair GRUB2 When Ubuntu Won’t Boot

    Ubuntu and many other Linux distributions use the GRUB2 boot loader. If GRUB2 breaks—for example, if ...

  4. oracle的读写分离实现

    在MySQL作为应用系统的后台数据库时,我们常常见到这样的架构,一拖二.一拖三等等.这是用MySQL的读写分离技术,实现数据的写入和读取分别在不同的库上,提升了数据库服务能力. 同样,在Oracle作 ...

  5. Cookie/Session机制详解(转载)

    原文链接:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用 ...

  6. nagios系列(一)centos6.5环境部署nagios服务端

    nagios软件安装包存放目录:/home/oldboy/tools nagios服务安装目录:/usr/local/nagios 1.配置yum源 echo "------ step 1: ...

  7. Android手势滑动Tab

    Android手势滑动Tab //MainActivity.java public class MainActivity extends TabActivity { ; ; ; private Ges ...

  8. S5PV210初始化系统时钟

    S5PV210初始化系统时钟 S5PV210时钟体系S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解).显示相关的时钟domain ...

  9. Expm 2_2 查找中项问题

    对于长度为n的整型数组A,随机生成其数组元素值,然后实现一个线性时间的算法,在该数组中查找其中项. package org.xiu68.exp.exp3; import java.util.Array ...

  10. K最近邻kNN-学习笔记

    # -*- coding: utf-8 -*- """ Created on Thu Jan 24 09:34:32 2019 1. 翼尾花数据 2. 用 KNeighb ...