php 버전 처리 클래스
예를 들어 앱 버전이나 일부 버전 데이터를 기록하는 경우 1.0.0 버전 형식을 사용하여 데이터베이스에 기록하면 더 많아집니다. 쿼리를 필터링해야 할 때 번거로운 작업입니다.
버전 문자열을 숫자로 변환하면 버전 간 비교 및 필터링이 용이해집니다.
예: 3.0.1과 10.0.1 사이의 버전을 쿼리하려는 경우 3.0.1이 10.0.1(문자열 비교)보다 크기 때문에 쿼리하기 전에 버전을 처리해야 합니다.
3.0.1과 10.0.1을 숫자 30001과 100001로 변환하여 비교 및 쿼리를 하면 매우 편리합니다.
Version.class.php
<code><span><span><?php</span><span>/** * 版本处理类,提供版本与数字互相转换,方便入库后进行比较筛选 * Date: 2015-06-30 * Author: fdipzone * ver: 1.0 * * Func: * public version_to_integer 将版本转为数字 * public integer_to_version 将数字转为版本 * public check 检查版本格式是否正确 * public compare 比较两个版本的值 */</span><span><span>class</span><span>Version</span>{</span><span>// class start</span><span>/** * 将版本转为数字 *<span> @param</span> String $version 版本 *<span> @return</span> Int */</span><span>public</span><span><span>function</span><span>version_to_integer</span><span>(<span>$version</span>)</span>{</span><span>if</span>(<span>$this</span>->check(<span>$version</span>)){ <span>list</span>(<span>$major</span>, <span>$minor</span>, <span>$sub</span>) = explode(<span>'.'</span>, <span>$version</span>); <span>$integer_version</span> = <span>$major</span>*<span>10000</span> + <span>$minor</span>*<span>100</span> + <span>$sub</span>; <span>return</span> intval(<span>$integer_version</span>); }<span>else</span>{ <span>throw</span><span>new</span> ErrorException(<span>'version Validate Error'</span>); } } <span>/** * 将数字转为版本 *<span> @param</span> Int $version_code 版本的数字表示 *<span> @return</span> String */</span><span>public</span><span><span>function</span><span>integer_to_version</span><span>(<span>$version_code</span>)</span>{</span><span>if</span>(is_numeric(<span>$version_code</span>) && <span>$version_code</span>>=<span>10000</span>){ <span>$version</span> = <span>array</span>(); <span>$version</span>[<span>0</span>] = (int)(<span>$version_code</span>/<span>10000</span>); <span>$version</span>[<span>1</span>] = (int)(<span>$version_code</span>%<span>10000</span>/<span>100</span>); <span>$version</span>[<span>2</span>] = <span>$version_code</span>%<span>100</span>; <span>return</span> implode(<span>'.'</span>, <span>$version</span>); }<span>else</span>{ <span>throw</span><span>new</span> ErrorException(<span>'version code Validate Error'</span>); } } <span>/** * 检查版本格式是否正确 *<span> @param</span> String $version 版本 *<span> @return</span> Boolean */</span><span>public</span><span><span>function</span><span>check</span><span>(<span>$version</span>)</span>{</span><span>$ret</span> = preg_match(<span>'/^[0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,2}$/'</span>, <span>$version</span>); <span>return</span><span>$ret</span>? <span>true</span> : <span>false</span>; } <span>/** * 比较两个版本的值 *<span> @param</span> String $version1 版本1 *<span> @param</span> String $version2 版本2 *<span> @return</span> Int -1:1<2, 0:相等, 1:1>2 */</span><span>public</span><span><span>function</span><span>compare</span><span>(<span>$version1</span>, <span>$version2</span>)</span>{</span><span>if</span>(<span>$this</span>->check(<span>$version1</span>) && <span>$this</span>->check(<span>$version2</span>)){ <span>$version1_code</span> = <span>$this</span>->version_to_integer(<span>$version1</span>); <span>$version2_code</span> = <span>$this</span>->version_to_integer(<span>$version2</span>); <span>if</span>(<span>$version1_code</span>><span>$version2_code</span>){ <span>return</span><span>1</span>; }<span>elseif</span>(<span>$version1_code</span><<span>$version2_code</span>){ <span>return</span> -<span>1</span>; }<span>else</span>{ <span>return</span><span>0</span>; } }<span>else</span>{ <span>throw</span><span>new</span> ErrorException(<span>'version1 or version2 Validate Error'</span>); } } } <span>// class end</span><span>?></span></span></code>
demo.php
<code><span><?php</span><span>require</span><span>'Version.class.php'</span>; <span>$version</span> = <span>'2.7.1'</span>; <span>$obj</span> = <span>new</span> Version(); <span>// 版本转数字</span><span>$version_code</span> = <span>$obj</span>->version_to_integer(<span>$version</span>); <span>echo</span><span>$version_code</span>.<span>'<br>'</span>; <span>// 20701</span><span>// 数字转版本</span><span>$version</span> = <span>$obj</span>->integer_to_version(<span>$version_code</span>); <span>echo</span><span>$version</span>.<span>'<br>'</span>; <span>// 2.7.1</span><span>// 检查版本</span><span>$version</span> = <span>'1.1.a'</span>; var_dump(<span>$obj</span>->check(<span>$version</span>)); <span>// false</span><span>// 比较两个版本</span><span>$version1</span> = <span>'2.9.9'</span>; <span>$version2</span> = <span>'10.0.1'</span>; <span>$result</span> = <span>$obj</span>->compare(<span>$version1</span>, <span>$version2</span>); <span>echo</span><span>$result</span>; <span>// -1</span><span>?></span></span></code>
소스코드 다운로드 주소 : 보시려면 클릭하세요
저작권 표시 : 이 글은 해당 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.
위 내용은 PHP 버전 처리 클래스에 대한 내용을 포함하여 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.