设为首页 收藏本站
查看: 1037|回复: 0

[经验分享] PHP技术基础

[复制链接]

尚未签到

发表于 2018-12-13 14:15:08 | 显示全部楼层 |阅读模式
  1.php4种标签风格及3种注释风格
  i.标签风格
  a.XML风格
  
  b.ASP风格
  
  c.脚本风格
  
  echo "hello world!";
  
  d.极简风格
  
  注意:当使用极简风格和ASP风格时需要在php.ini文件中配置short_open_tag和asp_tags设置为on
  ii.注释风格
  a.c++风格的单行注释 //
  b.c++风格的多行注释 /**/
  c.shell风格的注释 #
  2.php脚本执行的3种参数传递与解析
  a.$argc和$argv 传递参数
  
  执行结果: php.exe  .\hello.php   hello world -a 123
  paras count : 5Array
  (
  [0] => .\hello.php
  [1] => hello
  [2] => world
  [3] => -a
  [4] => 123
  )
  b.getopt()函数解析参数
  
  执行结果:php test.php -a 345 -b 12q3
  Array
  (
  [a] => 345
   => 12q3
  )
  c.提示用户输入
  
  3.php数据类型
  php的变量使用$开头,属于动态数据类型,数据类型包括:
  boolean string integer float  array object resource null值
  数据类型的定义:
  a.string 单引号和双引号字符串的区别
  同shell中的单双引号的区别相同,双引号的字符串需要先执行递归的变量替代
  $a='hello world';
  echo "hi,$a";
  b1.string的界定符输出
  目的:增强可读性
  $string=编写php脚本;对表单元素的value属性进行赋值
  
  
  
  include 和require的执行过程都是先将代码原本的拷贝到当前文件再执行。
  return的效果也可以理解成将代码返回。return后面的代码将不会被拷贝。
  这种拷贝有一个缺陷就是:同名变量或类有可能产生错误。
  12.php与JavaScript交互
  a.js的一些常识
  js是一种由浏览器运行解析的脚本(也可以由服务器执行)。可以在不与服务器交互的条件下实现动态网页。
  事件驱动:js是基于对象的语言。采用了事件驱动,当激发了某些事件时将执行相应的js代码。
  js事件相应模式:
  js的常用事件:onclick,ondblclick,onmousedown,...可以在网上查询js常用事件
  与html解耦合: 包含外部文件
  在页面底部(之前)引入js脚本,原因:由于js加载阻塞页面,而HTML是下载多少渲染多少,因此我们把它至于页面底部,让UI线程先执行完再加载js脚本
  13.日期与时间
  14.cookie与session
  cookie:
  a.cookie是从一个web页面到下一个web页面的数据传递方法,存储在客户端;session是让数据在页面中持续有效的方法,存储在服务器端。功能:记录访客的信息;在页面之间传递变量;将所查看的Internet页缓存在cookie临时文件夹中;
  b.php设置cookie
  必须写在文件开头
  
  浏览器会定时清流cookie,即使是未过期cookie也可能在cookie容量满时被清理
  session
  a.session以随机且唯一的session_id为文件名保存在服务器的文件中,该session_id则是保存在cookie中
  写session:
  
  读session
  
  删除session
  unset($_SESSION['admin']);
  $_SESSION=array();//删除所有session
  session_destory();//彻底销毁会话,确定会话结束时,应该这么做
  b.session的过期时间(只有存在cookie时才能使用)
  i.session_set_cookie_params将设置session_id的过期时间
  
  ii.setcookie设置session_id的过期时间
  
  c.session只能使用当前session,如果想用上一个session,那是不可能的,因为无法得知session id。
  d.session_id的4种传递方式
  i.通过cookie传递,默认.需要客户端浏览器打开cookie。
  ii.设置php.ini中的session.use_trans_sid=1,让PHP自动跨页面传递session_id
  iii.通过GET方法,隐藏表单传递session_id
  iv.使用文件或者数据库存储session_id,在页面间传递中手动调用
  15.php的图形图像处理技术
  16.php文件处理
  17.php面向对象
  a.定义
  与c++相似
  final class demo{
  public function __construct(){         //构造函数
  echo __METHOD__.":".__LINE__."\n";
  }
  public function func($param){//普通函数
  $param++;
  echo "method func $paramn";
  }
  public function __destruct(){         //析构函数
  echo __METHOD__.":".__LINE__."\n";
  echo $this->sex;
  }
  //public $name = 123+456;   错误:初始化时不能带有计算
  static $a = '$a';
  const  A = 'A';
  public $name = '凤姐';
  protected $sex = '男+女';
  private $age = 23;
  }
  类的构造及成员的调用:$demo = new demo(); $demo->func(1);
  成员的可见性有:public protected private 3种
  其它修饰符:static final const
  成员的调用方式: $this->property
  b.类中的魔术方法(具有一定意义的方法)
  i. 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此
  ii. 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法,接下来列出一些魔术方法,如果大家想详细了解可以针对某一个进行查询了解,这里就不大篇幅的介绍了。
  b1.__construct() 构造方法
  __destruct()析构方法
  b2.__autoload() 自动加载魔术方法。有的时候,在文件众多的项目中,要一一将所需类的文件都 include 进来,PHP 提供了 __autoload()方法,它会在试图使用尚未被定义的类时自动调用。 通过调用此函数,脚本引擎在PHP 出错失败前有了最后一个机会加载所需的类。
  加入在Person.php中存在Person类,则当在另一个文件中调用时可以这样:
  
  b3.__get()  当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。
  __set()  给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。
  __isset() 当在一个未定义的属性上调用isset()函数时调用此方法
  __unset() 当在一个未定义的属性上调用unset()函数时调用此方法
  
  运行该例子,输出:
  在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值
  在直接获取私有属性值的时候,自动调用了这个 __get() 方法
  我的名字叫:张三
  b4.__call( $method, $arg_array )  当调用一个未定义的方法是调用此方法,这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方法,如果本类中不存在__call()方法就去找父类中的__call()方法。
  b5.__clone()如果想复制一个对象则需要使用clone方法
  如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的 __clone() 方法来重写原本的属性和方法。__clone() 方法只会在对象被克隆clone的时候自动调用。
  
  b6.
  __toString()方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时
  __sleep()  串行化的时候用
  __wakeup 反串行化的时候调用
  __set_state()当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)
  __invoke当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
  __callStatic(PHP 5.3.0以上版本有效) 是为了处理静态方法调用
  c.继承与多态
  c1.范围解析操作符(::)
  作用:范围解析操作符或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。self,parent 和 static这三个特殊的关键字是用于在类定义的内部对其属性或 方法进行访问的。范围解析操作符(::)与类名连用,可以用于访问静态成员、方法和常量;与parent连用,可以访问被覆盖类中的成员和方法。
  
  c2.接口interface与实现implements
  class 子类 extends 父类 implemtns 接口1, 接口2, ...
  {
  ......
  }
  interface User{
  function getDiscount();
  function getUserType();
  }
  //VIP用户 接口实现
  class VipUser implements User{
  // VIP 用户折扣系数
  private $discount = 0.8;
  function getDiscount() {
  return $this->discount;
  }
  function getUserType() {
  return "VIP用户";
  }
  }
  d.对象的序列化与反序列化->存储
  序列化完整过程包括两个步骤:一个是序列化,就是把对象转化为二进制的字符串,serialize() 函数用于序列化一个对象;另一个是反序列化,就是把对象被序列转化的二进制字符串再转化为对象,unserialize() 函数来反序列化一个被序列化的对象。这样整个过程下来,对象内的类型结构及数据都是 完整的。
  
  18.php加密技术
  19.php操作mysql数据库
  resource mysql_connect("hostname","username","password"); //成功返回连接conn,失败返回null
  mysql_select_db(string dbname[,resource conn]);//选择使用的数据库 mysql_query("dbname"[,conn])
  $result=mysql_query(string query[,resource conn]);//适合所有sql语句,语句中不能加";"
  $info=mysql_fetch_array($result[,int result_type]); 从数组结果中获取递归一行信息,返回数组;如果是select则$info的键为字段的名字,如果到底尾部则false
  $info=mysql_fetch_object($result[,int result_type]); 获取一行作为对象,成员为字段名
  $info=mysql_fetch_row($result[,int result_type]); 返回数组,但是是以下标索引的。
  int mysql_num_rows()获取查询结果中总的记录数
  20.php的PDO
  a.支持的数据库
  PDO支持MS SQL SERVER,MYSQL,ODBC,ORACLE,POSTGRE SQL等。
  需要的php版本:php5.1以上
  b.当数据库发生变化时只需要修改PDO的DSN数据源名称
  c.PDO连接mysql
  $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'nsfocus123');
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "INSERT INTO user VALUES ('5', 'xiaohua');";
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  echo $dbh->lastinsertid();
  $sql = "SELECT * FROM user";
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ // print_r($stmt->fetchAll()  以列名为索引的数组
  print_r($row);
  }
  关于fetch的参数取值:
  PDO::FETCH_ASSOC      从结果集中获取以列名为索引的关联数组。
  PDO::FETCH_NUM        从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
  PDO::FETCH_BOTH       这是默认值,包含上面两种数组。
  PDO::FETCH_OBJ        从结果集当前行的记录中获取其属性对应各个列名的一个对象。
  PDO::FETCH_BOUND  使fetch()返回TRUE,并将获取的列赋给在bindParm()方法中指 定的相应变量。
  PDO::FETCH_LAZY      创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。
  21.ThinkPHP架构
  22.一些有用的函数
  a.trigger_error("输出信息", E_USER_ERROR);触发fatal错误,并退出程序执行
  b.exit(0); 退出当前进程
  c.$pid = pcntl_fork(); 创建子进程,需要pcntl模块
  23.php的模块安装方法
  a.下载需要安装的源码,编译生成.so或.dll
  b.将动态库复制到php安装目录下的ext目录中
  c.修改安装目录下的php.ini配置文件,在[php]字段中添加 extension=***.so
  e.php -m |grep *** 查看模块是否安装成功
  24. 内建函数和默认常量
  unset(变量)   删除某个变量
  is_null(变量)判断变量是否为null
  is_bool(变量)
  is_string(变量)
  is_float/is_double(变量)
  is_integer/is_int(变量)
  is_array(变量)
  is_object(变量)
  is_numeric(变量)
  define(变量,value)
  defined(变量)
  strlen(string)   #大量使用了c语言的库函数
  substr()
  explode() //字符串拆分
  implode() //(数组)合并为字符串
  echo
  print_t
  count() //统计数组元素个数
  array_push() //向数组最后添加一个元素
  array_pop()  //数组元素个数减一,返回最后一个元素
  array_search() //按值搜索元素,并返回键
  array_key_exists(key,array)  键是否存在
  array_unique() //删除数组中的重复元素
  self:: 指代类本身    $this->指代对象本身
  默认常量
  __FILE__  __LINE__
  PHP_VERSION   PHP_OS
  E_ERROR 常量,指向最近的错误处




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-651016-1-1.html 上篇帖子: 用yum源配合源码包安装openresty、mariadb、php7服务 下篇帖子: PHP 编译错误及解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表