本文将用DVWA搭建测试环境,测试ShareWAF对OWASP常见威胁的防护能力。
如您是ShareWAF的使用者,从中可学习到相关防护的使用方法,也可了解到相应的防护效果。
一、DVWA测试环境搭建
web环境准备,使用phpstudy:
从dvwa官网,下载dvwa源码:
下载后,解压到phpstudy的www目录中:
打开config目,修改config.inc.php.dist为config.inc.php:
同时在phpstudy中创建与config.inc.php中一致的数据库:
启动apache和mysql:
初次访问,安装dvwa:
执行最下方的“Create/Reset Database"。之后dvwa数据库创建成功,并会跳转到登录页。
dvwa测试环境已准备好。
二、ShareWAF部署
从ShareWAF官网下载ShareWAF最新版:
解压:
命令行中,安装依赖:
注:需要先安装好NodeJS,此过程略。
安装非常快,如下图,安装过程:66秒。然后启动ShareWAF:
进入ShareWAF管理员后台,添加测试域名。
注:管理员后台,非域名后台。管理员后台用于添加域名等,域名后台用于配置保护选项。
注意保护目标,使用的是81端口,因为要给SharWAF使用80端口,所以事先需在phpstudy中修改web端口为81:
由于是内网测试,所以需要修改hosts,做本地域名解析:
使用的测试域名是:www.dvwa.com
访问:
看页面中出现了ShareWAF图标,可知已在ShareWAF保护之下。
注:ShareWAF免费使用时有此图标,授权后没有。
接下来就可以进行防护测试了。
三、防护测试
登录DVWA:
SQL注入防护
防护前:
ShareWAF有多重防护,这是前端WAF的防护效果。
可将其关闭,以测试其它防护引擎的防护效果:
如要测试内核防护效果,先需配入防护规则:
注:上图规则为示例。
输入测试指令:
防护前:
防护后,被拦截:
ShareWAF命令行后台,也会看到相关调试信息:
注:拦截时,除前端WAF外,都会在ShareWAF后台有相应的审核日志信息。
XSS防护
防护前:
反射型:
存储型:
防护后:
反映型,未执行:
存储型,未执行:
命令行注入防护
防护前:
注:出现了乱码,不过能看出是返回了执行结果:)
防护后,无返回内容:
后台拦截记录:
文件上传防护
防护前:
防护后:
CSRF防护
防护前:
ShareWAF后台开启“防CSRF”:
防护后:
此外,暴力破解防护,可以使用ShareWAF的变形元素功能,也可使用风控规则限制;
WeakSessionIDS防护、FileInclusion防护等,都同理可进行防护前和防护后的效果对比。
这些,只是ShareWAF的常规防护功能。
ShareWAF的强大功能,如:JS混淆加密、网页源码加密、网页防篡改、反爬虫、前端WAF、反扫描、自定编程防护、大数据防护等并不能通过DVWA进行测试,DVWA不具备测试条件。
如要详细了解,请参考ShareWAF相关文档介绍进行功能实际使用、查看相关的防护效果。
总而言之,ShareWAF有传统防护功能,更有众多创新、实用功能,是一款具备足够先进性的新一代WAF!保护网站安全的新一代神器。
中国江西网(大江网)是江西省首家由国务院新闻办网络局批准成立的全国重点新闻网站,是江西日报社旗下五报三刊数字内容唯一授权经营单位,主要负责江西日报社PC、客户端等新媒体建设。网站运营实体为江西日报社全资子公司江西大江传媒网络股份有限公司,2015年成功挂牌新三板,成为“江西互联网第一股”,证券代码:833072,并被认定为江西省2019年第二批高新技术企业,致力于打造成为江西领先的新闻信息综合服务提供商,在区域网络市场和专业领域形成核心竞争力,是江西最大的网宣平台和移动宣传平台。
因事业发展需要,中国江西网现面向社会公开招聘一批工作人员。具体情况公告如下:
本次招聘岗位均要求全日制大学本科及以上学历,30周岁以下,特别优秀者可放宽到35周岁。
新媒体采编2名
1.新闻传播、中文专业;
2.具有良好的政治素质和思想品德,热爱党的新闻事业,恪守新闻工作者职业道德。
3.有较强的采写和策划能力,能根据采访要求,完成原创稿件;
4.熟悉网络媒体采编业务的的运作模式与流程,能够熟练运用图文、视频或H5等各种软件;
5.创新意识强,有良好的沟通能力、团队精神以及服务意识,具有高度责任心,吃苦耐劳,人品端正,无拖延症,对工作富有激情。
视频编辑2名
1.广播电视新闻、编导、导演等相关专业;
2.具有对新闻事件的敏感性,剪辑思维、策划能力及组织经验强;
3.工作责任心强,能承受压力,具备团队合作精神;
4.能熟练使用大洋、AE、ED、PR等视频剪辑软件,有较强的审美能力和视频资料挖掘搜集整理能力,并且对电视节目包装有较强的认识;
5.具备一定的后期包装、动画合成能力,能使用AE等合成软件;
6.能熟练使用3DMAX、MAYA等一种或各种3D制作软件
7.具备摄像知识,对色彩、构图、镜头语言有清晰认识,有网络视频流媒体及电视台相关工作经验者优先。
视频节目主持人1名
1.普通话一级乙等以上(含一级乙等),25周岁以下;
2.男女不限,形象气质佳,有良好的团队精神和创新意识;
3.有良好的视频节目专题策划,组织协调和独立采访能力;
4.了解网络视频主持和节目策划制作的一般流程;
5.有电视台或视频媒体工作经验者优先。
视频部后期制作/节目包装1名
1.全日制本科及以上学历,广播电视新闻、编导、导演等相关专业,35周岁以下;
2.具有对新闻事件的敏感性,剪辑思维、策划能力及组织经验强;
3.工作责任心强,能承受压力,具备团队合作精神;
4.能熟练使用大洋、AE、ED等视频剪辑软件,有较强的审美能力,并且对电视节目包装有较强的认识;
5.具备一定的后期动画合成能力,能使用AE等合成软件;
6.能熟练使用3DMAX、MAYA等一种或各种3D制作软件
7.具备摄像知识,有网络视频流媒体及电视台相关工作经验者优先。
摄影记者1名
1.新闻传播、摄影专业;
2.能根据摄影定位要求,完成摄影工作,并原创稿件。
3.有较强的采写和策划能力;
4.熟悉网络媒体采编业务的的运作模式与流程,能够熟练运用各种摄影设备,有深厚的摄影功底;
5.有良好的沟通能力、团队精神以及服务意识,具有高度责任心,吃苦耐劳,人品端正,无拖延症,对工作富有激情。
移动新媒体开发师1名
任职要求:
1、至少熟悉一门后端语言,如nodejs/asp.net/php或一种其他类似后台技术,NodeJS优先;
2、了解常用的数据结构、算法、设计模式
3、有MySQL, Redis或 MongoDB等相关数据库使用经验。
4、了解Linux,常用Shell命令,能熟练的办公;
6、熟练掌握使用git,为版本控制工具,活跃github更佳
7、了解RESTFUL,对DNS,HTTP,TCP/IP和相关的其他底层网络协议有了解。
8、能掌握python
运维工程师1名
任职要求:
1、有IDC机房运维、网络维护或网络安全工作经验者优先;
2、熟悉windows和Linux环境下面的各种服务器的搭建与维护;
3、熟悉主流网络设备厂商:路由器、交换机、防火墙、负载均衡等在网络内的应用;
4、熟练Linux,会编写Shell脚本
5、熟练掌握python
6、熟练掌握docker
web前端开发工程师1名
1、本科以上学历,计算机相关专业;
2、精通HTML、CSS、Javascript,熟悉主流JS框架;
3、掌握PHP、node.js、Java开发之一,有IT运维需求调研及系统原型设计经验和全栈开发经验者优先;
4、有大型网站开发相关经验优先;熟悉主流浏览器,了解其兼容性和开发模式;
5、熟练使用至少两种CSS框架、bootstrap;具有Vue、Angular、Reacty其中之一开发经验者优先。
6、动手能力强、有研发作品的应届毕业生也可报名面试;
招聘邮箱:3411948 @qq.com
简历命名方式:应聘岗位+姓名(例如:新媒体编辑+张珊)
联系人:金先生
联系电话:0791-86847737
简历投递截止时间:2020年8月12日
联系地址:南昌市红谷滩新区红谷中大道1326号江西日报社23楼
报名者经条件初审合格后,将组织参加笔试、面试。鉴于当前疫情影响,时间另行通知。
最近,网络上有很多网民就选择哪种编程语言进行学习而纠结。例如,关于Java和php的优势和不足,今天为大家分析一下Java语言和PHP语言的区别。
一、Java语言的优势和不足
Java是非常热门的编程语言,与其他高级语言相比,则是非常基础的语言。并且Java是跨平台的,具有Android,Swing,J2EE和J2ME等多种应用程序。就业方面比较广泛,市场利用者的需求也很大。由于Java经常开发大型系统,因此大型企业往往需要大量的Java资源。
Java学习门槛高于php,需要学习更多的内容,掌握Java技术,确实可能需要4个月以上,待遇相对高于php,据统计,一线城市Java程序员平均工资7000左右,有1年的工作经验,月薪8500-1万左右。
二、PHP语言的优势和不足
PHP主要用于开发网站,许多较小的网站都是使用PHP开发的。因为PHP是开源的,所以PHP长期使用的原因就在于此。在电子商务、社区和其他领域,PHP的应用非常广泛,因此PHP具有非常成熟的开放源代码和模板。
缺点是受众小,可替代性强。PHP是脚本语言,所以PHP学习比较简单,经过3-4个月的时间就能上手,并且找工作起薪比例比Java较低,平均工资比Java低,但是经验丰富的php程序员工资会要高一些。
本节我们一起学习下php的常见函数使用。
01php的EOF(heredoc) 概念及其使用说明
php EOF(heredoc)是一种在命令行shell(如sh、csh、bash、PowerShell等)和程序语言(像Perl、php、Python和Ruby)里定义一个字符串的方法。需要注意的是,EOF是一种字符串方法。
php中的EOF使用概述:
1. EOF使用完成后必须后接分号,否则编译通不过。2. EOF 可以用任意其它字符代替,只需保证结束标志与开始标志一致(比如我们可以用html、EOS等字符串来代替EOF,但是需要保持开始和结束使用的标志符一样,且不能在正文中重复,也就是开始使用了EOF,结束的时候必须使用EOF,但是正文中不能有EOF)。3. 结束标志必须顶格独自占一行并且必须从行首开始,前后不能衔接任何空白和字符。4. 开始标志可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。5.EOF 中是会解析 html 格式内容的,并且在双引号内的内容也有转义效果6. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当于q和qq的用法。使用示例如下图:
EOF格式示例02php语言的数据类型
和其他语言一样,php语言的数据的数据类型也包含了字符串、整型、浮点型、数组、对象以及空值,类似于其他语言的对应数据类型,这些东西都是通用的,这里不再赘述。如下代码是先将字符串Hello world赋值给变量x,然后再将x变量的值变为空(null),最后使用var_dump输出x的结果(var_dump会先判断变量的类型和长度,然后输出结果。
<?php$x="Hello world!";$x=null;var_dump($x);?>
说明:var_dump() 方法,判断一个变量的类型与长度,并输出变量的数值,如果变量有值,则输出是变量的值,并返回数据类型。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
03PHP 类型比较
尽管 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。
松散比较:使用两个等号 == 比较,只比较值,不比较类型。严格比较:用三个等号 === 比较,除了比较值,也比较类型。也就是说,如果一个定义为字符串123,另一个定义为整型变量123,那么在使用"=="来进行比较的时候,这两个值是为true的,而如果使用"==="来进行比较时,那么返回值就是false了。
示例代码如下图:
类型比较示例代码04PHP 常量
常量值被定义后,在脚本的其他任何地方都不能被改变。
常量是一个简单值的标志符。该值在脚本中不能改变。一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。常量在整个脚本中都可以使用。
设置常量,常量是全局的,可以在对应的范围内使用。一般使用 define() 函数,函数语法如下:bool define (string $name , mixed $value [,bool $case_insensitive =false])
该函数有三个参数:
name:必选参数,就是你所定义的常量名称,即标志符。value:必选参数,定义的常量的值。case_insensitive :可选参数,为ture,表示该常量对大小写不敏感。默认是false(大小写敏感)。
上述就是本次为大家分享的内容,喜欢就点个赞吧,同时也希望大家多多点赞关注!
第一节 hello world
文件命名
文件后缀名为 php
文件名中不可包含中文、空格、特殊符号
建议使用有意义的英文单词命名
语言标记
标准风格
<?php.......?>
注意:纯php脚本文件要求:1. 开始标签要在第一行顶头写;2. 删除结束标签。
图一php标签之外是html语言环境,在纯php代码环境下,这些html字符(包括看不见的空格或者回车,制表符号)也会一同输出,引发意外错误。因此,在编码规范中规定:库文件、class类文件等只要是纯php代码的文件,要删除结尾的 ?> 结束标签。
<!DOCTYPE html><html><body> <button>ajax异步请求</button> </body></html><script src="jquery-1.11.3.min.js"></script><script> $("button").click(function(){ $.get("doAction.php",function(data){ alert(data? "ok":"no"); }) })</script><?php echo false; //输出:""?>
结束标签后有空格,输出:" "
所以要删除php的结束标签
图二注释符与结束符
//单行注释/*多行注释*/
结束符使用英文分号 “;”
$hello="hello world";
常用命令和系统函数
echo
echo输出 : 只能输出字符串、数字、布尔(true:1 false:空)类型的数据
<?php$hello="hello world"; echo "<h1>{$hello}</h1>";?>
快速输出
<h1><?= $hello ?></h1>
相当于
<?php echo $hello ?>
var_dump()
此函数显示一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构
注意: var_dump中的变量必须是存在的,如果变量存在但值是空,则返回false 没有变量时,则返回NULL 该函数有输出的功能,因此不必加其它的输出函数
代码require与include
1. require
常用于引入重要文件,若引入失败会直接影响到当前整个脚本,引入失败报 Error错误
2. include
常用于引入普通文件,若引入失败不会对当前脚本有较大的影响,引入失败报 Warning错误
3. require_once
避免重复引入,其他规则同require
4. include_once
避免重复引入,其他规则同include
header
用于定义 HTTP协议头信息。
php第二节 变量与常量
变量
声明变量:$
命名规则:字母数字下划线、首字母不能为数字、严格区分大小写、且不能使用关键字!推荐驼峰命名法
变量销毁:unset(变量名),被销毁的变量在内存中被释放
引用变量
变量引用:用不同的名字访问同一个变量内容
$man="zhangsan";$student=&$man; //用&符号引用var_dump($man===$student);//true
常量
使用define关键字定义常量,常量命名要全部大写,常量的数据类型不能是 资源、对象
定义常量
define("SCHOOL","清华大学");
判断常量
var_dump( defined("SCHOOL") ); //true
变量与常量的差异
数据第三节 数据类型
八种数据类型
四种标量类型
– 布尔型(boolean)
– 整 型(integer)范围:2^32或2^64(超出自动转换为浮点型)
– 浮点型(float)范围:双精度
– 字符串(string)
两种复合类型
– 数组型(array)
– 对象型(object)
两种特殊类型
– 资源型(resource)
– 空 型(null)
不同进制
$number1 = 0b10; //0b开头 二进制 结果:2
$number2 = 0123; //0开头 八进制 结果:83
$number3 = 0x123; //0X开头 十六进制 结果:291
对象型
具有一定功能和特征的单个事物,对象是属性和方法的集合
资源型
变量可以是文件夹、一个文件、从数据库中得到的结果集等,操作这个变量,相当于操作这些资源。
NULL型
null也是数据,通常表示一种状态,变量没有任何值,就用null表示。以下情况会得到null:
直接将一个变量赋值为null
将一个变量销毁后再次使用该变量
直接使用一个不存在的变量
第四节 数据类型转换
自动类型转换
在特殊运算时,会有自动类型转换的情况
null 对象
未知变量(或被销毁变量)
强制类型转换
改变原变量类型
使用 settype() 函数可以将一个指定变量强制转换为另一种指定类型
不改变原变量类型
格式:新变量 = (指定变量类型) 原变量;
强制类型转换:不改变原变量类型
定义一个存储变量
$old = 1;$new; //用于接收转换之后的变量
开始转换
$new = (Boolean) $old; //true$new = (Integer) $old; //1$new = (Float) $old; //float 1$new = (String) $old; //"1"$new = (Array) $old; //Array$new = (Object) $sum; //Object
常用变量检测函数
常用数学运算函数
PHP第五节 字符串
三种定义方式
$num=10;
单引号
$title='hxsd'.$num.'beijing';
双引号 支持解析变量,不能解析表达式,例如:{$hxsd+1}
$school ="<div id='box'><h1>{$hxsd}</h1></div>";
定界符(可以任意取名)
$str2 = <<<mark<div id='box'><h1 class="main">{$hxsd}</h1></div>mark;
注意:
定界符中可以使用单、双引号,可以解析变量
定界符中的字符串,会保留所有格式,包括各种空格(尽量顶格写,避免开始的空格)
结束标记一定要顶格写
开始、结束标记(上面代码中的‘mark’)后不能再有空格等字符(包括注释语句也不能有)
字符串支持折行,注意:折行位置会多一个空格
$txt="abcdefghijk"; //显示结果:abcd efghijk
常用字符串操作函数
第六节 数组
数组类型
关联式数组:下标为有意义的字符串
索引式数组:下标为默认从0开始的数值
定义数组
直接赋值方式定义
$a[] = 10; $a[] = 20; $a['name'] = '张三';$a['sex'] = '男';
结果
/** 0 => int 10 * 1 => int 20 * 'name' => string '张三' (length=9) * 'sex' => string '男' (length=3) */
使用array()函数
$b = array(10,20,30);$b = array('name'=>'张三','sex'=>'男','age'=>28);
快捷赋值
$c = [10,20,30];$c = ['name'=>'张三','sex'=>'男','age'=>28];
二维数组与多维数组
二维数组
$group = array('one'=>array('张三','李四','王五'), 'two'=>array('赵六','孙七'),);
定义一个三维数组
$class = array('class01'=>array( 'one'=>array('张三','李四','王五'), 'two'=>array('赵六','孙七'), ), 'class02'=>array( 'one'=>array('张三','李四','王五'), 'two'=>array('赵六','孙七'), ););
获取李四
echo $class['class02']['one'][1]; //李四
数组的遍历
for遍历索引数组
$arr=[11,22,33,44,55];for($i=0; $i<count($arr); $i++){var_dump($arr[$i]);};
foreach
$f_arr=["name"=>"zhangsan","age"=>18,"sex"=>"m"];foreach ($f_arr as $key=>$value) {echo $key.":".$value."<br>";};
list(只用于索引数组)
list($a,$b,$c,$d,$e) = ["张三","李四","王五","小明","小红"];echo $a,$b,$c,$d,$e;
数组的输出
$b = 3.1; $c = TRUE; var_dump($b,$c);/* 输出: float(3.1) bool(true)*/
复制数组
$arr1=[111,222,333];$arr2=$arr1; //$arr2是个新数组var_dump($arr2===$arr1);//false
用&引用数组
$arr3=&$arr1;var_dump($arr3===$arr1);//true
数组常用函数
数组转JSON
第七节 运算符
$a=10;$b=20;$c="hxsd";
数字与数字相加:数学运算
echo $a+$b; //30
数字与字符串相加
echo $a+'2018你好';//2028 数字开头为2018echo "2018你好"+$a;//2028 同上
echo $a+'你好2018';//10 以字母开头字符串,转换成0echo "你好2018"+$a;//10 同上
数字与bool值
echo $a+true;//11 true:1 false:0
PHP-网站介绍「程序员培养之路第三十天」
MySQL-函数「程序员培养之路第二十九天」
MySQL-存储过程、触发器「程序员培养之路第二十八天」
很多人说到面向对象都会想到java,C++编程语言等,而且很多java程序员都觉得只有java才有面向对象,java程序员要被打脸了。
php对面向对象的支持,从php5开始完全实现面向对象,在开发大型商城网站上面,完全无压力。到目前php7已经出来,在提升速度和大型网站建设方面形成了自己的优势。
我们来看下php对面向对象的支持,在PHP中是通过类来完成封装:
class Something{
//作用域修饰符:private私有的;;
private $x=null;
//加上$this伪变量来指向操作的对象
public functionsetX($v){
$this->x=$v;
}
public functiongetX(){
return $this->x;
}
}
使用new操作符来创建一个对象:
$obj=new Something;
然后你可以使用成员函数通过:
$obj->setX(5);
$see=$obj->getX();
echo$see;
看到这里,估计很多php都经历过以上的代码编程,很多人都觉得这是封装类的一个过程,告诉你们所谓的面向对象符合三个条件:1.抽象数据类型和信息封装 2.继承 3.多态,通过以上简单的案例,php早已符合面向对象概念,所以希望以后各位网友不要再说只有java才有面向对象了。
编辑:mowen
虽然目前PHP依然是IT行业最为流行的编程语言之一,但是随着Python、Go等语言的快速崛起,PHP的应用必然会受到一定的影响,由于PHP语言的应用场景主要集中在Web开发领域,所以在未来的大数据、人工智能时代,PHP程序员的价值成长空间也会受到一定的影响。
对于PHP程序员来说,如果要想提升自身的职场价值,可以考虑向大数据和人工智能领域发展,而要想在这两个领域从事开发岗位,应该重视一下Python语言的学习。实际上,当前也确实有不少PHP程序员在转向Python开发岗位。相对于PHP开发岗位来说,Python开发岗位对于从业者的要求要稍微高一些,所以并不建议PHP程序员在脱离岗位的情况下进行转型。
PHP程序员要想转向Python开发领域,应该从三个方面做好准备,其一是掌握Python语言自身的语法结构,这个步骤是相对比较容易的,因为Python语言本身就比较简单;其二是补学一下算法知识,不论在大数据领域还是人工智能领域,Python程序员通常都需要具备一定的算法知识基础;其三是学习一下技术平台知识,目前大数据开发和人工智能开发很多都是基于技术平台展开的。从这个角度来看,PHP程序员转向Python开发领域往往需要学习较长一段时间,而且也具有一定的难度。
最后,虽然当前PHP语言的发展势头没有Python等语言迅猛,但是PHP语言在IT行业依然占据着非常重要的地位,在PHP领域深耕也依然有一定的上升空间。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!
原码,反码,补码介绍
原码:
就是“数学意义”上的一个整数的二进制的原来(本来)的形式。
其中,又在计算机中有一个规定:一个二进制数字(比如32位),最左边的一位是符号位:
0表示是正数;
1表示是负数;
原码举例:
3就是:00000000 00000000 00000000 00000011
5就是:00000000 00000000 00000000 00000101
-3就是:10000000 00000000 00000000 00000011
-5就是:10000000 00000000 00000000 00000101
反码:
这样规定:
正数的反码就是其原码本身(即不变);
负数的反码是:符号位不变,其他所有位取反(~)所得到的结果:
3的反码就是: 00000000 00000000 00000000 00000011
5的反码就是: 00000000 00000000 00000000 00000101
-3的反码就是: 11111111 11111111 11111111 11111100
-5的反码就是: 11111111 11111111 11111111 11111010
补码:
这样规定:
正数的补码就是其原码本身(即不变);
负数的补码是:符号位不变,反码加1,(即原码基础上其他所有位取反后加1):
3的补码就是: 00000000 00000000 00000000 00000011
5的补码就是: 00000000 00000000 00000000 00000101
-3的补码就是: 11111111 11111111 11111111 11111101
-5的补码就是: 11111111 11111111 11111111 11111011
举一例:
4的原码:00000000 00000000 00000000 00000100
-4的原码:10000000 00000000 00000000 00000100
-4的反码:11111111 11111111 11111111 11111011
-4的补码:11111111 11111111 11111111 11111100
位运算的一个典型应用:
目标:
“管理”一组具有开关状态的“数据”(事物)。
开关状态:就是只有2个状态,比如true/false,“是/否”, “开/关”,“来/去”
一组:就是指多个,若干个——自然应该是有一个明确的个数
假设:
有5个灯泡,需要管理。这5个灯泡,有个编号顺序,它们的管理需求是:
1,指定任意一盏灯泡的当前状态;
2,能够打开任意指定的一盏灯泡;
3,能够关闭任意指定的一盏灯泡;
案例1:
运行结果:
案例2:
运行结果:
案例3:
字符串类型:string
php学习之php的八种数据类型之字符串string的使用
1.整数型:int
说明:是负数、0、正数的集合、在php中存储整数为10进制、八进制、十六进制
语法:$var=整数数字;
八进制的写法:在数字前面加上0,就是八进制。数字的范围有0-7。算法:出去开头0,各位+十位*8 +百为*8*8+千位*8*8*8….$num=0456; //4*8*8+5*8+6=302十六进制的写法:在数字前面加上0x,数字为0-f算法:出去开头0,各位+十位*16 +百为*16*16+千位*16*16*16….$num =0x456;//4*16*16+5*16+6=1110 十进制的写法:直接写数字,数字范围0-9
php最大的存储数值为:21亿。用常量PHP_INIT_MAX查询,最大存储值为2147483647,超过这个值自动转为float型
php最大的位数为14位,一个数值占多个位置,PHP_INT_SIZE
2.浮点型:float
说明:就是小数,浮点型也叫浮点数、float、双精度数double或实数real
php中的小说有两种表现形式,
普通的小数科学计数法
浮点数的精度有限,尽管取决于系统,php通常使用ieee754双精度格式,则由于取整而导致的最大相对误差为1.11e-16。非基本数学运算可能会给出更大的误差,并且要考虑到进行复合运算时的误差传递
此外,以十进制能够精确表示的有理数如0.1或0.7,无论有多少为数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式,这就会造成混乱的结果,如:floor((0.1+0.7)*10)通常会返回7而不是预期中的8,因为结果内部的表示其实是类似于7.9999999999999991118…
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等,如果确实需要更高的精度,应该使用任意精度数学函数或者gmp函数
普通小数形式
小数末尾多个,小数点后面超过最大长度,会自动删除超出部分,最末尾会四舍五入
科学计数形式
超过14位自动转为科学计数法
3.布尔类型:boolean
说明:在php中布尔型的数据只有两个值,true和false
布尔值一般都用于返回的结果用于流程控制语句中
4.数组:array
说明:一组数据的集合
$变量=array(元素1,元素2,元素3,……);
5.对象:object
说明:世间万物皆为对象
在php中的对象是由类创建来的
//class创建一个类,调用对象$name=null;$age=0;Class people{//属性var $name;var $age;//方法function run(){echo '跑步';}}//创建对象$zs=new people();$zs->name='张三';$zs->age=23;echo $zs->name;$zs->run();$ls= new people();
6.空:null
说明特殊的null值表示一个变量没有值,null类型唯一的值就是它本身null
在php中只能有定义变量并赋值的情况,没有只定义不赋值,这个时候就需要创建一个变量,不知道存储说明值,这个时候可以使用null来创建变量
用法:
7资源:resource
说明:就是引用php外部的内容,这个时候的类型就是资源,资源是通过专门的函数建立和使用的
8.手册中的类型:用于说明需要某种类型的数据
mixed:一个参数可以接收多种不同的类型,如果函数需要的形参是两种以上,都会使用mixednumber:可以是int和floatvoid:作为返回类型意味着函数的返回值是无用的,void作为参数列表意味着函数不接受任何参数
9数据类型的转换
说明:在php 中数据类型是可以进行互相转换的,如整型1转换成字符串’1′
在php中分两种转换形式,:自动转换和强制转换
自动转换
给到特定写法就会改变原来的类型
强制转换
可以使用一些特殊的方式来强制型的改变类型
允许的强制转换的有:
(int),(integer):转换为整型(bool),(boolean):转化为布尔类型(float),(double),(real):转换为浮点型(string):转换为字符串(array):转换为数组(object):转换为对象(unset):转换为null
<?php/*** @Author: admin* @Date: 2018-08-16 22:38:26* @Last Modified by: admin* @Last Modified time: 2018-08-17 04:29:11*/////定义一个十进制的整数的类型$num1 = 10;$num2 = 0;$num3 = -10;echo $num1."<br>".$num2."<br>".$num3;echo "<br>";//定义一个八进制的类型$num1 = 000;//0$num2 = 077774;//32764$num3 = 05555;//2925echo $num1."<br>".$num2."<br>".$num3;echo "<br>";//定义一个十六进制的类型$num1 = 0x00ff;//255$num2 = 0xfff;//4095$num3 = 0x00000;//0echo $num1."<br>".$num2."<br>".$num3;echo "<br>";//查询最大php存储数值echo PHP_INT_MAX;//最大存储值为2147483647,超过这个值自动转为float型//查询一个数字占多大位置$num = 1111111111111111;//超过14位后自动转为科学计数法var_dump($num);echo PHP_INT_SIZE;//4$num = 11111111111;//超过int的取值范围后自动转为float型var_dump($num);$num = 1111111111;//没超过int的取值范围是int型var_dump($num);//小数浮点型$num1=1.1;$num2=0.0;//小数末尾多个,小数点后面超过最大长度,会自动删除超出部分,最末尾会四舍五入$num3=1.00000000000000000000000000;var_dump($num3);$num3=9.99999999999999999999999999;var_dump($num3);$num3=5.55555555555555555555555555;var_dump($num3);$num3=4.44444444444444444444444444;var_dump($num3);//科学计数$num=1111111111111111.1;//超过14位自动转为科学计数法var_dump($num);$num=1111111111111.1;//没超过14位var_dump($num);//不精准体现$num=floor((0.1+0.7)*10);//floor强制转化成浮点型var_dump($num);//结果为7二不是8//bool类型$true=true;var_dump($true);//一般布尔类型会用在控制语句中if ($num==1) {echo '真';} else {echo '假';}echo "<hr>";//class创建一个类,调用对象$name=null;$age=0;Class people{//属性var $name;var $age;//方法function run(){echo '跑步';}}//创建对象$zs=new people();$zs->name='张三';$zs->age=23;echo $zs->name;$zs->run();//null类型$a=null;$b='';//空字符串if (empty($b)) {echo '空';} else {echo $b;}//给函数的形参加默认值function FunctionName($value='',$b=null){}FunctionName();//资源resource 连接数据库$link= @mysql_connect('127.0.0.1','root','root');var_dump($link);//自动转换$a=1;$b=2;$v=$a.$b;//转换为字符串var_dump($v);if ($a) {//自动转换为boolean类型echo '真';}//强制转换$num=1;var_dump((string)$num);//强制转换为字符串$str='123';var_dump((int)$str);//强制转换为整数
常听朋友说,PHP是世界上最好的语言,没有之一。听我心潮澎湃,差点就去学PHP(其实我学了,只是太笨,没学会)。作为世界上最好的语言,当然是有它的理由的,我感觉PHP最好的一点,就是代码修改之后无需编译就能直接运行,这是它最方便最实用的长处,但同时也是它致命的缺陷,就是代码容易被抄袭,因为你打开PHP文件,代码就直接在那摆着,你随便改,随便抄。
与JAVA和C#这些编译型语言相比,PHP的修改之后无需编译直接就可以执行的优点,无疑给开发者带来极大的便利。编译型语言的程序员在开发阶段,每次修改完代码之后要先编译,然后调试运行,开发效率上比PHP程序员要慢的多。
另外,编译型语言修改代码需要有开发环境,PHP就不一样了,用Windows自带的文本编辑工具就能修改(当然不提倡这样做,除非紧急情况)。有同学问了,你把PHP说的这么好,为啥没有见到用PHP开发大型项目?大项目是有的,互联网巨头百度就是用的PHP。那除了百度呢,这个,那个,嗯,让我想想。
的确,现在的大型互联网公司,后台程序大都用的JAVA这样的编译型语言,那么和JAVA相比,PHP到底差在哪里了?
各类语言漏洞占比
首先,PHP是脚本语言,无需编译,开发效率高。但这既是它的优点,也是它的缺点。缺点就是它的运行效率比编译型编译要慢。开发效率和执行效率成反比,这是软件开发一条亘古不变的定理。
其次,PHP是弱类型语言,在隐式类型转换的时候,容易造成数据转换出错,埋下隐蔽的漏洞。这个缺点也是相当严重,轻则后台被非法登录,重则服务器会被拿下。这是程序员在敲代码时需要注意的地方,尤其是在权限判断的关键地方。
还有就是PHP的门槛低,新手入门快。如果从别的语言转到PHP,那就更快了。但正是这低门槛造就了PHP的开发者良莠不齐,直接导致PHP项目的安全性大打折扣。当然PHP的安全问题,是这门语言的天生缺陷,不能全说是程序员的错。
不得不说,PHP语言今日的广泛应用是其它后台语言无法比拟的,而如今像Python,NodeJS这类的后起之秀,也在一点一点蚕食PHP的市场。脚本语言以其独特的魅力征服了程序员,为啥程序员喜欢脚本语言?答:开发效率高。问:开发效率高有什么好处?答:可以早下班。这句话深深触动了程序员的内心。