PHP中简单实现数学组合算法
公式
有时候也表示成:
c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)
2性质
c(n,m)=c(n,n-m);
3递推公式
c(n,m)=c(n-1,m-1)+c(n-1,m)
等式左边表示从n个元素中选取m个元素,而等式右边表示这一个过程的另一种实现方法:任意选择n中的某个备选元素为特殊元素,从n中选m个元素可以由此特殊元素的分成两类情况,即m个被选择元素包含了特殊元素和m个被选择元素不包含该特殊元素。
代码如下 | 复制代码 |
<?php |
集合涵义
在PHP中以两个下划线开头的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被称为"魔术方法"(Magic methods)。如果希望PHP调用这些魔术方法,首先必须的类中定义,否则PHP不会执行未创建的魔术方法。[1]
注意:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。
魔术方法中文说明
*PHP面向对象有哪些魔术方法,每个魔术方法如何如何,请写个测试类并运行
*
*__construct($argv1,$argv2,...)
*功能:类的构造方法,作用就是初始化对象
*参数:任意多个,任意类型
*返回值:无
*__destruct()
*功能:类的析构方法,对象被销毁时被调用的,作用是释放内存
*参数:无
*返回值:无
*__get($name)
*功能:当程序试图调用一个未定义或者不可见的成员变量的时候就会自动调用该方法,这个时候程序试图调用*的成员变量的返回值是该方法的返回值;
*参数:$name为试图调用的成员变量的名称,这个参数的传递是PHP自动完成的;
*返回值:类型(不确定)注意该方法可以设置成私有的(构造方法不要设置成私有的)。
*__set($name,$value)魔术方法
*功能:当程序试图给一个未定义或者不可见的成员变量赋值的时候就会自动调用该方法;
*参数:$name,$value分别表示试图赋值的成员变量名称和成员变量的值,这两个参数的传递是PHP自动完成的;
*返回值:这个方法不会返回值 注意该方法可以设置成私有的(构造方法不要设置成私有的)。
*__isset($name)
*功能:当用isset($name)检测一个私有的成员变量的时候就会自动调用该方法,这个时候isset($name)的返回值就
*为该方法的返回值经过转化的布尔值(<除“0”>非空的字符串,非零,true,有单元的数组将会转化为true;0,"0",空*字符串,NULL,没有单元的数组将会转化为false);
*参数:$name为试图检测的成员变量的名称,这个参数的传递是PHP自动完成的;
*返回值:类型(不确定)注意该方法可以设置成私有的(构造方法不要设置成私有的),当用isset()函数检测的是
*公有的成员变量的时候可以直接检测,如果没有__isset()方法而直接检测私有成员会得到不准确的结果即isset()
*会始终返回false;
*__unset($name)
*功能:当用unset($name)撤销一个私有的成员变量的时候就会自动调用该方法;
*参数:$name为试图撤销的成员变量的名称,这个参数的传递是PHP自动完成的;
*返回值:不能返回值,强制返回值将会出错,当用unset()函数撤销的是公有
*的成员变量的时候可以直接撤销,如果没有__unset()方法而直接撤销私有成员不会成功;
*__toString()
*功能:当程度试图输出一个对象类型的变量的时候PHP会自动调用该方法;
*参数:没有参数,如果有会提示出错;
*返回值:字符型(该方法必须通过return返回一个字符串);
*__clone()
*功能:在用clone关键字克隆一个对象的时候PHP会自动调用这个方法,是为了给克隆出来的对象增添自己的属
*性和方法;
*参数:不用传递参数;
*返回值:不用返回值;
*__call($name,$argument)
*功能:当程序试图调用一个不存在的成员方法的时候会自动调用该方法;
*参数:PHP将自动将调用的不存在的方法名传递给$name,不存在的方法中的参数整合为一个数组传递给*$argument;
*返回值:不用返回值;
*__sleep()
功能:使用serialize()函数时,如果实例化的对象中包含__sleep()方法,则会先执行__sleep()方法,该方法可以清除
*对象并返回该对象中所有变量的数组。使用__sleep()方法的目的是关闭对象可能具有的数据库连接等类似的
*善后工作
*参数:无需要传递参数
*返回值:数组类型(Array)该对象中所有变量的数组
*__wakeup()
*功能:使用unserialize()函数重新还原一个被serialize()函数序列化的对象,__wakeup()方法则是恢复序列化中可能
*丢失的数据库连接及相关工作
*参数:无需要传递参数
*返回值:----------------------------
*__set_state($arr)
*功能:可以通过var_export()来访问类的静态方法__set_state(),该方法必须是静态的且必须返回一个对象
*参数:$arr为一个数组
*返回值:为一个对象
*
*__autoload($class_name)
*功能:在指定的路径下自动查找并导入实例化需要使用的类
*参数:$class_name为类名
*返回值:*__callStatic($name,$argument)
*功能:当程序试图在静态方法中调用一个未定义或者不可见的成员方法的时候会自动调用该方法;
*参数:PHP将自动将调用的不存在的方法名传递给$name,不存在的方法中的参数整合为一个数组传递给$argument;
*返回值:不用返回值;*注意:PHP5.3以上的版本支持该魔术方法
*注意:__classStatic()方法必须被申明为public并且为static,否则会产生一个warning错误
*__invoke($x,$y,...)
*功能:当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
*参数:以函数调用方法调用一个对象时传递的任意多个参数
*返回值:不确定*注意:PHP5.3以上的版本支持该魔术方法
**/
魔术方法例子
代码如下 | 复制代码 |
class XuDianYang{ CheShi.class.php <?php |
1.直接以文件形式输出的方式
代码如下 | 复制代码 |
<?php header("Content-type:text/html;charset=utf-8"); |
2. post过来的数据接受方式
代码如下 | 复制代码 |
<?php |
在这个文件中,首先得到html文件中POST表单域txt_json的值,放入变量$json_string中,而后判断,如果当前PHP的设定为magic_quotes_gpc=On,即传入的双引号等会被转义,这样json_decode函数无法解析,因此我们要将其反转义化。而后,使用json_decode函数将JSON文本转换为对象,保存在$user变量中,最终用echo var_dump($user);,将该对象dump输出出来
php的HTTP_RAW_POST_DATA
用Content-Type=text/xml 类型,提交一个xml文档内容给了php server,要怎么获得这个POST数据。
The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).
由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。
另外还有一项 php://input 也可以实现此这个功能
php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。
应用
代码如下 | 复制代码 |
a.htm <form action="post.php" method="post"> post.php
|
__file__
dirname(__file__) //获取到的是这个软连接本身的绝对目录
如果想要在软连接的可执行php文件中获取网站的根目录的方法是:
$dir = $_SERVER['DOCUMENT_ROOT'] ; //#获取当前运行脚本所在的文档根目录。
php获取网站根目录方法一:
<?php
define("WWWROOT",str_ireplace(str_replace("/","\\",$_SERVER['PHP_SELF']),'',__FILE__)."\\");
echo WWWROOT ;
?>
php获取网站根目录方法二:
<?php
define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../'))); //定义站点目录
?>
php获取网站根目录方法三:
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录。在服务器配置文件中定义
其它的获取目录的方法:
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
例子
我们利用preg_replace与str_ireplace来进行替换操作
代码如下 | 复制代码 |
public static function filterStr( $value ) |
另收藏:
代码如下 | 复制代码 |
<?php |
相关文章
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
- php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
- 有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
jQuery+slidereveal实现的面板滑动侧边展出效果
我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15- 翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
SQLMAP结合Meterpreter实现注入渗透返回shell
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25- 复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
- js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。 先来看看设置透明度的兼容性代码: 复制代码 代码如下: function setOpacity(ele, opacity) { if (...2014-06-07
图文详解Heap Sort堆排序算法及JavaScript的代码实现
这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)
这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25- 这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
- 本文我们需要解决的问题是如何实现Http请求来实现通信,解决Android 2.3 版本以后无法使用Http请求问题,下面请看正文。 Android开发中使用HttpClient来开发Http程序...2016-09-20
- 这篇文章主要介绍了C#常用数据结构和算法,这里我们总结了一些知识点,可以帮助大家理解这些概念。...2020-06-25
- 在MySQL中,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时...2015-11-24
- 这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
- 复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
- 这篇文章主要介绍了C++实现的O(n)复杂度内查找第K大数算法,结合实例形式分析了算法的原理以及具体实现方法,需要的朋友可以参考下...2020-04-25