PHP使用数组实现队列我们只要用到 rray_push()和array_pop()两个系统函数来完成了,下面一起来看看吧,希望例子对各位有帮助。
例子
代码如下 |
复制代码 |
<?php
/**
*@php模拟 队列
*/
class Queue
{
private $myQueue; //队列容器
private $size ; //队列的长度
public function __construct()
{
$this->myQueue=array();
$this->size=0;
}
/**
*@入栈操作
*/
public function putQueue($data)
{
$this->myQueue[$this->size++]=$data;
return $this;
}
/**
*@出栈
*/
public function getQueue()
{
if(!$this->isEmpty())
{
$front=array_splice($this->myQueue,0,1);
$this->size--;
return $front[0];
}
return false;
}
/**
*@ 获取全部的消息队列
*/
public function allQueue()
{
return $this->myQueue;
}
/**
*@ 获取队列的表态
*/
public function frontQueue()
{
if(!$this->isEmpty())
{
return $this->myQueue[0];
}
return false;
}
/**
*@ 返回队列的长度
*/
public function getSize()
{
return $this->size;
}
public function isEmpty()
{
return 0===$this->size;
}
}
?>
|
下面本文章给各位简单的总结一下php面相对象的魔术方法相关方法命令了,希望这几个例子能帮助到大家理解魔术方法吧。
1.__construct()
实例化对象是被自动调用。当__construct和以类名为函数名的函数 同时存在时调用__construct,另一个不背调用。
类名为函数名的函数为老版的构造函数。
2.__destruct()
当删除一个对象或一个对象操作结束是被调用。
3.__call()
对象调用某个方法。若方法不存在,这调用__call 这个方法
4.__get()
读取一个对象属性,如果对象属性是私有的会调用它
5.__set()
给一个对象属性赋值时如果属性是私有的会调用它
6.__toString()
打印一个对象的时候会被调用。
7.__clone()
克隆对象时被调用,如:$a=new test(); $a1=clone $a;
8.__sleep()
Serialize 之前被调用,若对象比较大,想删减一点东西在序列化可以用它。
9.__wakeup()
Unserialize时被调用,做些对象的初始化工作。
10.__isset()
检测一个对象的属性是否存在如果 检测的属性是私有的时候会被调用。
11.__unset()
删除一个对象属性时如果 删除的对象属性是私有的会被调用
12.__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
13.__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被掉用。
php书籍=php web开发大全
代码如下 |
复制代码 |
<?php
class BookStore{
private $p = array();
function __set($name,$value){
print "set:::::{$name}:{$value}<br />";
$this->p[$name] = $value;
}
function __get($name){
print "get:::::{$name}<br />";
//array_key_exists检查给定的键名或索引是否存在于数组中
return array_key_exists($name,$this->p) ? $this->p[$name] : null;
}
}
$computer = new BookStore();
$computer->php = 'php web开发大全';
echo "php书籍=".$computer->php;
?>
|
(2)__autoload(),你是不是还在因为调用的类或函数过多而烦恼,是不是还在因为写了n遍的require()和include()
而烦恼,知道__autoload()方法,你就不需这么做了,下面我来做一个抛砖引玉的作用:
MyClass.php文件:
代码如下 |
复制代码 |
<?php
class MyClass{
function printWeb(){
echo "你现在访问的网站是www.111cn.net";
}
}
?>
general.inc.php文件
<?php
function __autoload($class_name){
$file(dirname(__FILE__))."/libs/classes/$class_name.php";
if (!file_exists($file)){
return false;
}else{
require_once($file);
}
}
?>
main.php
<?php
require("general.inc.php");
$obj = new Myclass();
if (is_object($obj)){
$obj->printWeb();
}else{
echo "类文件没调入";
}
?>
|
运行结果:
你现在访问的网站是www.111cn.net
当然还有很多魔术方法,比如__isset(),__unset(),__toString(),__clone()这里就不一一介绍了
php中SOAP WebService的wsdl文件生成类是一段老外写的代码非常的简单好用了并且我用了很久没碰到过什么问题,希望对各位有帮助。
代码如下
代码如下 |
复制代码 |
class SoapDiscovery {
private $class_name = '';
private $service_name = '';
/**
* SoapDiscovery::__construct() SoapDiscovery class Constructor.
*
* @param string $class_name
* @param string $service_name
* */
public function __construct($class_name = '', $service_name = '') {
$this->class_name = $class_name;
$this->service_name = $service_name;
}
/**
* SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
*
* @return string
* */
public function getWSDL() {
if (empty($this->service_name)) {
throw new Exception('No service name.');
}
$headerWSDL = "<!--?xml version=\"1.0\" ?-->\n";
$headerWSDL.= "<definitions name="\"$this-">service_name\" targetNamespace=\"urn:$this->service_name\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"urn:$this->service_name\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\">\n";
$headerWSDL.= "<types xmlns="\"http://schemas.xmlsoap.org/wsdl/\"">\n";
if (empty($this->class_name)) {
throw new Exception('No class name.');
}
$class = new ReflectionClass($this->class_name);
if (!$class->isInstantiable()) {
throw new Exception('Class is not instantiable.');
}
$methods = $class->getMethods();
$portTypeWSDL = '<porttype name="' . $this->service_name . 'Port">';
$bindingWSDL = '<binding name="' . $this->service_name . 'Binding" type="tns:' . $this->service_name . " port\"="">\n<soap:binding style="\"rpc\"" transport="\"http://schemas.xmlsoap.org/soap/http\"">\n";
$serviceWSDL = '<service name="' . $this->service_name . " \"="">\n<documentation>\n<port name="\""" .="" $this-="">service_name . 'Port" binding="tns:' . $this->service_name . "Binding\"><soap:address location="\"http://"" .="" $_server['server_name']="" ':'="" $_server['server_port']="" $_server['php_self']="" "\"="">\n</soap:address></port>\n</documentation></service>\n";
$messageWSDL = '';
foreach ($methods as $method) {
if ($method->isPublic() && !$method->isConstructor()) {
$portTypeWSDL.= '<operation name="' . $method->getName() . " \"="">\n" . '<input message="tns:' . $method->getName() . " request\"="">\n<output message="\"tns:"" .="" $method-="">getName() . "Response\" />\n</output></operation>\n";
$bindingWSDL.= '<operation name="' . $method->getName() . " \"="">\n" . '<soap:operation soapaction="urn:' . $this->service_name . '#' . $this->class_name . '#' . $method->getName() . " \"="">\n<input><soap:body use="\"encoded\"" namespace="\"urn:$this-">service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n\n<output>\n<soap:body use="\"encoded\"" namespace="\"urn:$this-">service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</soap:body></output>\n</soap:body></soap:operation></operation>\n";
$messageWSDL.= '<message name="' . $method->getName() . " request\"="">\n";
$parameters = $method->getParameters();
foreach ($parameters as $parameter) {
$messageWSDL.= '<part name="' . $parameter->getName() . " \"="" type="\"xsd:string\"">\n";
}
$messageWSDL.= "</part></message>\n";
$messageWSDL.= '<message name="' . $method->getName() . " response\"="">\n";
$messageWSDL.= '<part name="' . $method->getName() . " \"="" type="\"xsd:string\"">\n";
$messageWSDL.= "</part></message>\n";
}
}
$portTypeWSDL.= "</soap:binding></binding></porttype>\n";
$bindingWSDL.= "\n";
return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</types></definitions>');
}
/**
* SoapDiscovery::getDiscovery() Returns discovery of WSDL.
*
* @return string
* */
public function getDiscovery() {
return "<!--?xml version=\"1.0\" ?-->\n<disco:discovery xmlns:disco="\"http://schemas.xmlsoap.org/disco/\"" xmlns:scl="\"http://schemas.xmlsoap.org/disco/scl/\"">\n<scl:contractref ref="\"http://"" .="" $_server['server_name']="" ':'="" $_server['server_port']="" $_server['php_self']="" "?wsdl\"="">\n</scl:contractref></disco:discovery>";
}
}
|
使用方法
代码如下 |
复制代码 |
$a = new SoapDiscovery();
|
然后里面的方法与类就可以直接调用了哦。
下面来给各位同学介绍一个php身份证校验码的计算例子,希望本函数代码能帮助到各位同学哦。
例子
代码如下 |
复制代码 |
public function id_verify($my_id) {
$coefficient = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
$remainder_map = array(1,0,'X',9,8,7,6,5,4,3,2);
$count = 0;
for ($i=0; $i < 17; $i++) {
$count += $my_id[$i] * $coefficient[$i];
}
$remainder = $count % 11;
if ($my_id[17] == $remainder_map[$remainder]){
echo 'true';
}else{
echo 'false';
}
}
|
使用方法很简单
代码如下 |
复制代码 |
$body = '44010221990101001';
id_verify($my_id) //就会有结果输出的哦
|
在网上看到有很多关于截取中文字符串的一些函数,在此本文章就为各位整理一下这些常用的截取中文字符串的例子吧,希望例子能帮助到大家哦。
常用的php函数
strstr(string,string) //从前面第一次出现某个字符串的地方截取到最后
strrchr(string,string) //从某个字符串从最后出现的位置截取到结尾
strpos(string,string[,int]) //某个字符串第一次出现的位置
strrpos(string,string) //某个字符串最后一次出现的位置
substr(string,int[,int]) //从指定位置开始截取字符串,可以指定截取的长度。
strlen(string) //获取字符串的长度PHP截取开始和结束标记间的字符
方法一:利用explode对字符串进行分
代码如下 |
复制代码 |
/**
* Get the content between $start and $end
*
* @param string $content 原始字符
* @param string $start 起始字符
* @param string $end 结束字符
* @return string
*/
function GetStringBetween($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '';
}
|
方法二:利用substr截取字符,由于php组件函数,因此字符串处理效率比explode方法要高一些
代码如下 |
复制代码 |
/**
* Get the content between $start and $end
*
* @param string $content 原始字符
* @param string $start 起始字符
* @param string $end 结束字符
* @return string
*/
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
|
PHP截取所有符合起始与结束标记的字符串
代码如下 |
复制代码 |
/**
* Get all every strings between two tags
*
* @param string $string 原始字符串
* @param string $start 起始字符串
* @param string $end 结束字符串
* @return array
*/
function get_all_strings_between($string,$start,$end)
{
//Returns an array of all values which are between two tags in a set of data
$strings = array();
$startPos = 0;
$i = 0;
//echo strlen($string)."n";
while($startPos < strlen($string) && $matched = get_string_between(substr($string,$startPos),$start,$end))
{
if ($matched == null || $matched[1] == null || $matched[1] == '') break;
$startPos = $matched[0]+$startPos+1;
array_push($strings,$matched[1]);
$i++;
}
return $strings;
}
function get_string_between($string, $start, $end){
$ini = strpos($string,$start);
if ($ini == 0) return null;
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return array($ini+$len,substr($string,$ini,$len));
}
|
php截取起始与结束标记间字符,带截取次数、是否允许重复选项
代码如下 |
复制代码 |
/**
* Get all every strings between two tags
*
* @param string $string 原始字符串
* @param string $start 起始字符串
* @param string $end 结束字符串
* @return array
*/
function get_all_strings_between($string,$start,$end)
{
//Returns an array of all values which are between two tags in a set of data
$strings = array();
$startPos = 0;
$i = 0;
//echo strlen($string)."n";
while($startPos < strlen($string) && $matched = get_string_between(substr($string,$startPos),$start,$end))
{
if ($matched == null || $matched[1] == null || $matched[1] == '') break;
$startPos = $matched[0]+$startPos+1;
array_push($strings,$matched[1]);
$i++;
}
return $strings;
}
function get_string_between($string, $start, $end){
$ini = strpos($string,$start);
if ($ini == 0) return null;
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return array($ini+$len,substr($string,$ini,$len));
}
|
截取GB2312中文字符串
代码如下 |
复制代码 |
< ?php
//截取中文字符串
function mysubstr($str, $start, $len) {
$tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} else
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr;
}
?>
|
截取utf8编码的多字节字符串
代码如下 |
复制代码 |
< ?php
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
?>
|