在PHP5中类(CLASS)的新特征
在PHP5中类(CLASS)的新特征
/******************************/
author:大龄青年
E_mail:wenadmin@sina.com
/*****************************/
php5新添加了好多的新函数和特征,但是在目前最新的chm的手册中都没有体现,要到在线的手册中查找,烦啊!!!
废话不多说了,来看看php5中全新的class对比php2的class有什么新的特征。
1/ 加了访问权限的控制:使用private/public/protected的特征
2/ 加入了接口和抽象类的概念,interface/abstract,可惜的是类的继承还是树形的单继承。
3/ 可以定义final 函数,不能在父类中覆盖这个函数
4/ 终于可以在类中定义 静态的变量,在php中只能在函数中定义,
static $aa = nulll;
另外还提供了 const 方法
const mystatic = ''aaaaaa'';
5/ 新提供了一个self内部方法
echo self::mystatic;
6/ 加入了如下的内部特征
__construct() 初始化
__destruct(); 卸载
__get(); 组织返回类中的某些变量值。
__set(); 组织给类中的某些变量值赋值。
__call(); 调用不存在的类的函数的时候得处理方法
__clone(); copy对象用
__sleep(); 序列化的时候用
__weekup(); 反序列的时候用
7/ 默认的object的赋值采用了应用的方式,如:
$object2 = $object1
$object2 得到的是$object1的引用,不是在内存中copy副本
8/ 提供了 reflection API ,主要用来显示class/function 本省的结构和统计信息,这个是一个全新的东西,很难说清楚,(虽然很强大,但是我个人还是没有找到“这位英雄可以用武的地方”)
9/ 对class对象提供了一个枚举的功能,可以用for循环来处理对象中的全局的变量。
10/ 提供了一个__autoload();函数,用来自动的加载类声明文件
详细情况:http://www.php.net/manual/en/language.oop5.basic.php
按标签的点击率来设置标签字体的大小和 颜色
本程序没有考虑程序性能和函数封装。。。只想表达这个算法
具体代码如下:
<?php
function showTag($cur=47,$tag="美女和野兽"){
$maxSize=300;$minSize=30;//maxSize为标签字体最大大小,minSize为标签最小大小 按百分比
$max=100;$min=8;//max为最多标签点击数 min为最少点击数 cur为当前标签当前点击数
$tagColor=$tagSize=$minSize;#tagColor为标签最终颜色,tagsize为标签最终字体大小
$tagSize=@(float)($cur-$min)/($max-$min)*($maxSize-$minSize);
$colors=array("0.2"=>"#333333","0.4"=>"#0033CC","0.6"=>"#660099","0.8"=>"#00FFFF","1"=>"#FF0000");
//color为存放颜色的数组,按百分百存放,例如在0-0.2之间的color1
$colorkeys=array_keys($colors);
$select=(float)($cur-$min)/($max-$min);
$len=count($colorkeys);
$i=0;$j=$len-1;
while($i<$j){//二分查找
$index=($i+$j)/2;
if($select>=(float)$colorkeys[$index] && $select<(float)$colorkeys[$index+1]) break;
elseif($select<(float)$colorkeys[$index]) $j--;
elseif($select>(float)$colorkeys[$index]) $i++;
elseif($select==(float)$colorkeys[$index+1]) break;
else break;
}
$tagColor=$colors[$colorkeys{($i+$j)/2}];
echo "<span style=''font-size:${tagSize}%;color:$tagColor''>$tag </span>";
}
showTag(90);showTag(66,"股民");showTag(50,"我的爱情");showTag(100,"MM");
?>
在本系列文章中,我们将全面探讨如何在PHP开发环境中全面阻止SQL注入式攻击,并给出一个具体的开发示例。
一、 引言
PHP是一种力量强大但相当容易学习的服务器端脚本语言,即使是经验不多的程序员也能够使用它来创建复杂的动态的web站点。然而,它在实现因特网服务的秘密和安全方面却常常存在许多困难。在本系列文章中,我们将向读者介绍进行web开发所必需的安全背景以及PHP特定的知识和代码-你可以借以保护你自己的web应用程序的安全性和一致性。首先,我们简单地回顾一下服务器安全问题-展示你如何存取一个共享宿主环境下的私人信息,使开发者脱离开生产服务器,维持最新的软件,提供加密的频道,并且控制对你的系统的存取。
然后,我们讨论PHP脚本实现中的普遍存在的脆弱性。我们将解释如何保护你的脚本免于SQL注入,防止跨站点脚本化和远程执行,并且阻止对临时文件及会话的"劫持"。
在最后一篇中,我们将实现一个安全的Web应用程序。你将学习如何验证用户身份,授权并跟踪应用程序使用,避免数据损失,安全地执行高风险性的系统命令,并能够安全地使用web服务。无论你是否有足够的PHP安全开发经验,本系列文章都会提供丰富的信息来帮助你构建更为安全的在线应用程序。
二、 什么是SQL注入
如果你打算永远不使用某些数据的话,那么把它们存储于一个数据库是毫无意义的;因为数据库的设计目的是为了方便地存取和操作数据库中的数据。但是,如果只是简单地这样做则有可能会导致潜在的灾难。这种情况并不主要是因为你自己可能偶然删除数据库中的一切;而是因为,当你试图完成某项"无辜"的任务时,你有可能被某些人所"劫持"-使用他自己的破坏性数据来取代你自己的数据。我们称这种取代为"注入"。
其实,每当你要求用户输入构造一个数据库查询,你是在允许该用户参与构建一个存取数据库服务器的命令。一位友好的用户可能对实现这样的操作感觉很满意;然而,一位恶意的用户将会试图发现一种方法来扭曲该命令,从而导致该被的扭曲命令删除数据,甚至做出更为危险的事情。作为一个程序员,你的任务是寻找一种方法来避免这样的恶意攻击。
三、 SQL注入工作原理
构造一个数据库查询是一个非常直接的过程。典型地,它会遵循如下思路来实现。仅为说明问题,我们将假定你有一个葡萄酒数据库表格"wines",其中有一个字段为"variety"(即葡萄酒类型):
1. 提供一个表单-允许用户提交某些要搜索的内容。让我们假定用户选择搜索类型为"lagrein"的葡萄酒。
2. 检索该用户的搜索术语,并且保存它-通过把它赋给一个如下所示的变量来实现:
$variety = $_POST[''variety''];
因此,变量$variety的值现在为:
lagrein
3. 然后,使用该变量在WHERE子句中构造一个数据库查询:
$query = "SELECT * FROM wines WHERE variety=''$variety''";
所以,变量$query的值现在如下所示:
SELECT * FROM wines WHERE variety=''lagrein''
4. 把该查询提交给MySQL服务器。
5. MySQL返回wines表格中的所有记录-其中,字段variety的值为"lagrein"。
到目前为止,这应该是一个你所熟悉的而且是非常轻松的过程。遗憾的是,有时我们所熟悉并感到舒适的过程却容易导致我们产生自满情绪。现在,让我们再重新分析一下刚才构建的查询。
1. 你创建的这个查询的固定部分以一个单引号结束,你将使用它来描述变量值的开始:
$query = " SELECT * FROM wines WHERE variety = ''";
2. 使用原有的固定不变的部分与包含用户提交的变量的值:
$query .= $variety;
3. 然后,你使用另一个单引号来连接此结果-描述该变量值的结束:
$ query .= "''";
于是,$query的值如下所示:
SELECT * FROM wines WHERE variety = ''lagrein''
这个构造的成功依赖用户的输入。在本文示例中,你正在使用单个单词(也可能是一组单词)来指明一种葡萄酒类型。因此,该查询的构建是无任何问题的,并且结果也会是你所期望的-一个葡萄酒类型为"lagrein"的葡萄酒列表。现在,让我们想象,既然你的用户不是输入一个简单的类型为"lagrein"的葡萄酒类型,而是输入了下列内容(注意包括其中的两个标点符号):
lagrein'' or 1=1;
临时修改php.ini文件
ini_set("项目","值");
ini_set("output_buffering","0");
ob_start();
歌道“最近比较烦”,我云“最近比较忙”,但无论烦与忙,都不能阻止我对技术的追求,亦不能打断我要做中国开源事业的脚步。
作为我提出已久的jwork框架,终于,于2007年未,形成了php第一版。
Jwork框架分为三种语言:
Java版
.Net版
PHP版
目前,java和.net版处于研发阶段。php版jwork v1.0 for php初步计划于2008年2月1日正式开源。
Jwork框架的特点:
1、和其它框架相比,Jwork框架不需配置,不改变原有开发习惯。
2、Jwork框架是开发的经验集,集成了软件中开发中常用的API。
3、Jwork框架集成了Jpage分页,AJAX,HTML编辑器等。
4、充分提高开发效率,便于小组开发、协同开发。
Jwork v1.0 for php
jwork v1.0 for php是用于php开发的一个框架集。现将其功能简介如下:
1、集成Jpage,最优化的分页方案。
Jpage解决了海量和普通查询的需求,优化了软件结构,一句sql即可分页,为互联网上现有的最佳分页解决方案。
2、集成数据层DAO,最简单的数据操作。
一般而言,开发必要操作数据库。开发php就意味着要对mysql操作。出于此,Jwork框架v1.0集成了对mysql操作的封装。
对于插入数据,不需要写sql语句,只需指定列名,控件名即可。
对于修改数据,可实现表单自动回填,不需去给控件赋值。
3、集成了ajax框架,一句话即可实现ajax。
随着web2.0的发展,ajax的应用越来越广,jwork框架采用最原始、清晰的ajax实现,即简单方便的实现了ajax,又让ajax的各过程清晰可见。
4、集成众多研发者的多年开发经验。
jwork框架的一些工具类,时间类、上传类、邮箱类等API,集成了众多研发者的Java、.NET、PHP、ASP的web开发经验,你在开发中常遇到需求实现,在jwork框架中均有收录。
5、集成了开发中常用的JS和PHP验证方法,如email格式、手机格式、身份证格式的验证。
时间就是金钱,提供开发效率,不但可以让你收获财富,更可以让你轻松应对开发工作。
Jwork部分演示:
添加、修改演示:
function Add()
{
$data = new MysqlDao();
$filed="code_name,code_lang,user_id,
相关文章
PHP Fatal error: Cannot use object of type stdClass as array in错误
下面一起来看看在php开发中碰到PHP Fatal error: Cannot use object of type stdClass as array in错误问题的解决办法吧。 普通的数组出现如下错误 代码...2016-11-25idea 无法创建Scala class 选项的原因分析及解决办法汇总
这篇文章主要介绍了idea 无法创建Scala class 选项的解决办法汇总,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 这篇文章主要介绍了前端JavaScript中的class,类是用于创建对象的模板,JavaScript中的Class更多的还是语法糖,本质上绕不开原型链,下面就来看看关于JavaScript class类的详细内容吧...2021-10-22
- 这篇文章主要介绍了Angular ng-class的知识,并整理了相关资料,有兴趣的小伙伴可以参考下...2016-10-03
浅析Swift中struct与class的区别(汇编角度底层分析)
这篇文章主要介绍了Swift中struct与class的区别 ,本文从汇编角度分析struct与class的区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30- 这篇文章主要介绍了JavaScript中关联原型链属性特性的相关资料,需要的朋友可以参考下...2016-02-18
- 这篇文章主要介绍了jquery采用oop模式class类的使用方法,结合实例形式分析了jQuery模拟oop模式定义class类与方法的技巧,需要的朋友可以参考下...2016-01-24
- 这篇文章主要给大家介绍了关于Swift中static和class关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
- 这篇文章主要介绍了C#开发教程之利用特性自定义数据导出到Excel的相关资料,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了React从Class方式转Hooks详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-30
AngularJS使用ng-class动态增减class样式的方法示例
这篇文章主要介绍了AngularJS使用ng-class动态增减class样式的方法,结合具体实例形式分析了ng-class操作页面class样式的相关技巧,需要的朋友可以参考下...2017-05-22jQuery针对input的class属性写了多个值情况下的选择方法
这篇文章主要介绍了jQuery针对input的class属性写了多个值情况下的选择方法,结合实例形式对比分析了jQuery选择器针对class属性中有多个值情况下的选中方法,需要的朋友可以参考下...2016-06-12- 这篇文章主要介绍了JavaScript操作class和style样式的相关资料,需要的朋友可以参考下...2016-02-18
- 这篇文章主要介绍了C++枚举类型enum与enum class的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-21
- 这篇文章主要介绍了python metaclass(元类)的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-08-14
Django获取model中的字段名和字段的verbose_name方式
这篇文章主要介绍了Django获取model中的字段名和字段的verbose_name方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-20- 这篇文章主要介绍了python 微信好友特征数据分析及可视化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-30
- 本文介绍了其在AtScript、改善依赖入驻、Annotations、路由方案等方面的改变。虽然不知道打破原有是否是件好事,不过由于不向后兼容,我们需要为迁移做好计划...2016-02-21
- 截止到目前为止,PHP官方已经发布了php7的RC5版本,预计在11月份左右会发布第一个正式版本!现在来说php7的重大特性肯定已经是定型了,不会再有什么变动了。后续一些版本的迭代主要也就是修修bug,优化之类的。下面就来说话我们一直期待的php7.0新特征吧...2016-01-09
- 在c++Template中,很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?...2020-04-25