検索
ホームページphp教程php手册php を使用して PHP スクリプト エンジンの組み込み関数を再実装する



// 本当に退屈なので、PHP を使用してカプセル化された関数の一部を PHP で再実装することを突然思いつきました。そこで、主に次のコードの一部を実装します。 PHP の関数は、PHP では利用できないいくつかの文字列処理関数も実装しますが、これらの同じ関数は C/VBScript/Perl などの他の言語でも実装できます。 , など、独自の関数ライブラリを作成できます。
// 以下の関数は学習目的のため、必ずしも正常に動作するとは限りません。
//

/**
* 文字列関数 再構築
*
* Copyright (c) 2005 heiyeluren
* 著者: heiyeluren

* $Id: StringFunctions.php,v 0.1 e 2005-5-29 23:21 heiyeluren Exp $
**/


// {{{ strlen()
/**
* Count string length
*
* @param string $str need count length string variable
* @return int return count result
* @version v0.1
* @create 2005-5-24
* @modified 2005-5-24
* @author heiyeluren
 */
関数 strlen1($str)
{
if ($str == '')
return 0;

$count = 0; > {
if ($str[$count] != NULL)
{
$count;
継続
}
else
}
return $count;
// {{{ substr()
/**
* Get sub string
*
* @param string $str need get sub string variable
* @param int $start start get sub string
* @param int $length need get string長さ
* @return string return sub string
* @version v0.2
* @create 2005-5-24
* @modified 2005-5-25
* @author heiyeluren < ;hyeiyeluren@163.com>
 */
function substr1($str, $start, $length=0)
{
if ($str == '')
return;
if ($start > strlen($str))
return;
if (($length != NULL) && ( $start > 0) && ($length > strlen($str)-$start))
return
if (($length != NULL) && ($start strlen($ str) $start))
return;

if ($length == NULL)
$length = (strlen($str) - $start); >
if ( $start {
for ($i=(strlen($str) $start); $i {
$substr .= $str[$i];
}
}

if ($length > 0)
{
($i=$start ; $i {
$substr .= $str[$i]
}
}

if ($length {
for ($i=$start; $i {
$substr .= $str[$ i];
}
}
return $substr;
// }}}


// {{{ strrev()
/**
* 反転文字列順序
*
* @param 文字列 $str 反転文字列変数が必要
* @return 文字列 反転文字列
* @version v0.1
* @create 2005- 5-24
* @modified 2005-5-24
* @author heiyeluren
 */
function strrev1($str)
{
if ($str == '')
0 を返す;
for ($i=(strlen($str)-1); $i>=0; $i--)
{
$rev_str .= $str[$i];
}
return $rev_str;
}
// }}}


// {{{ strcmp()
/**
* 文字列の比較
*
* @param 文字列 $s1 最初の 文字列
* @param 文字列 $s2 2番目の文字列
* @return int return -1,str1  str2, str1 = str2,
* return 0, other, return false
* @version v0.1
* @create 2005-5-24
* @modified 2005-5-24
* @author heiyeluren
 */
function strcmp1($s1, $ s2)
{
if (strlen($s1) return -1;
if (strlen($s1) > strlen($s2))
return 1;

for ($i=0; $i {
if ($s1[$i] == $s2[$i])
続行します。
else
return false;
}
0 を返す;
}
// }}}


// {{{ strchr(), strstr(), strpos()
/**
* 文字列の最初の出現を検索
*
* @param string $str parent string
* @param string $substr need match sub string
* @return int return find sub string at親文字列の最初の位置、
* f 見つからない場合、false を返す
* @version v0.4
* @create 2005-5-24
* @modified 2005-5-29
* @author heiyeluren
 */
function strchr1($str, $substr)
{
$m = strlen($str);
$n = strlen($substr);

if ($m return false;

for ($i=0; $i {
$sub = substr($str, $i, $n) ;
if (strcmp($sub, $substr) == 0)
return $i;
}
falseを返します。
}
// }}}


// {{{ str_replace()
/**
* 検索文字列のすべての出現箇所を置換文字列で置き換えます
*
* @param 文字列 $substr サブ文字列変数を置換する必要があります
* @param 文字列 $newsubstr 新しいサブ文字列
* @ param string $str operate parent string
* @return string return replace after new parent string
* @version v0.2
* @create 2005-5-24
* @modified 2005-5- 29
* @author heiyeluren
 */
function str_replace1($substr, $ newsubstr, $str)
{
$m = strlen($str);
$n = strlen($substr);
$x = strlen($newsubstr);

if (strchr($str, $substr) == false)
return false;

for ($i=0; $i {
$i = strchr($str, $substr);
$str = str_delete($str, $i, $n);
$str = str_insert($str, $i, $newstr);
}
return $str;
}
// }}}


/************ 以下の文字列処理関数は PHP では利用できないので、趣味で自分で書きました ***************/

// {{{ insert_str(), delete_str(), index_str()
/**
* 基本的な文字列操作
*
* @param 文字列 $str need get sub string variable
* @param int $start start get sub string
* @param int $length need get string長さ
* @return string return sub string
* @version v0.1
* @create 2005-5-24
* @modified 2005-5-24
* @author heiyeluren < ;hyeiyeluren@163.com>
 */
function str_insert($str, $i, $substr)
{

for($j=0; $j {
$startstr .= $str[$j];
}

for ($j=$i; $j {
$laststr .= $str[$j];
}
$str = ($startstr . $substr . $laststr);

$str; を返す
}


function str_delete($str, $i, $j)
{
for ($c=0; $c {
$startstr .= $str[$c];
}

for ($c=($i $j); $c {
$laststr .= $str[$c ];
}

$str = ($startstr . $laststr);

$str; を返す
}
// }}}


// {{{ strcpy()
/**
* 指定のサブ文字列を使用して文字列を置き換えます
*
* @param 文字列 $str サブ 文字列変数を取得する必要があります
* @param int $start start get サブ 文字列
* @param int $length need get string length
* @return string return sub string
* @version v0.1
* @create 2005-5-27
* @modified 2005-5-27
* @著者 heiyeluren
 */
function strcpy($s1, $ s2)
{
if (strlen($s1) == NULL)
return;
if (!isset($s2))
return;

for ($i=0; $i {
$s2[] = $s1[$i];
}
$s2 を返す;
}
// }}}


// {{{ strcat()
/**
* 指定のサブ文字列を使用して文字列を置き換えます
*
* @param 文字列 $str サブ 文字列変数を取得する必要があります
* @param int $start start get サブ 文字列
* @param int $length need get string length
* @return string return sub string
* @version v0.1
* @create 2005-5-27
* @modified 2005-5-27
* @著者 heiyeluren
 */
function strcat($s1, $ s2)
{
if (!isset($s1))
return;
if (!isset($s2))
return;

$newsstr = $s1 。 $s2;

$newsstr; を返す
}
// }}}


// {{{ php_encode(), php_decode()
/**
* 単純な文字列のエンコード/デコード関数
*
* @param 文字列 $str コード/エンコード 文字列変数が必要
* @return 文字列 コード/文字列後のエンコード
* @version v0.2
* @create 2005-3-11
* @modified 2005-5-24
* @author heiyeluren
 */

/* String encode function */
function php_encode ($str)
{
if ($str=='' && strlen($str)>128)
return false;

for($i=0; $i {
$c = ord($str[$i]);
if ($c>31 && $c $c = 20;
if ($c>106 && $c $c -= 75;
$word = chr($c);

$s .= $word;
}
$s を返す; 
}


/* 文字列デコード関数 */
関数 php_decode($str)
{
if ($str=='' && strlen($str) >128)
falseを返します。

for($i=0; $i {
$c = ord($word);
if ($c>106 && $c $c = $c-20;
if ($c>31 && $c $c = $c 75;
$word = chr($c);

$s .= $word;
}
$s を返す; 
}
// }}}


// {{{ php_encrypt(), php_decrypt()
/**
* 単純な文字列の暗号化/復号化関数
*
* @param 文字列 $str 暗号化文字列変数が必要
* @return 文字列 文字列の後に暗号化/復号化する
* @version v0.1
* @create 2005-5-27
* @modified 2005-5-29
* @author heiyeluren
 */

/* 暗号化キーを定義します */
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';

/* 文字列暗号化関数 */
関数 php_encrypt($str)
{
グローバル $encrypt_key, $decrypt_key;

if (strlen($str) == 0)
return false;

for ($i=0; $i {
for ($j=0; $j {
if ($str[$i] == $encrypt_key[$j])
{
$enstr .= $decrypt_key[$j];
休憩;
}
}
}
return $enstr;
}


/* String decrypt function */
function php_decrypt($str)
{
global $encrypt_key, $decrypt_key;

if (strlen($str) == 0)
return false;

for ($i=0; $i {
for ($j=0; $j {
if ($str[$i] == $decrypt_key[$j])
{
$enstr .= $encrypt_key[$j];
休憩;
}
}
}
return $enstr;
}
// }}}


如果代码不清晰的话,建议查看一下连接,是我在blogchina的博客:

http://heiyeluren .blogchina.com/1741318.html


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
如何在Go中使用命名管道?如何在Go中使用命名管道?May 11, 2023 pm 04:22 PM

命名管道是一种在操作系统中相对比较低级的进程通信方式,它是一种以文件为中介的进程通信方式。在Go语言中,通过os包提供了对命名管道的支持。在本文中,我们将介绍如何在Go中使用命名管道来实现进程间通信。一、命名管道的概念命名管道是一种特殊的文件,可以被多个进程同时访问。在Linux系统中,命名管道是一种特殊的文件类型,它们存在于文件系统的某个位置上,并且可以在

如何在Go中使用第三方库?如何在Go中使用第三方库?May 11, 2023 pm 03:30 PM

在Go语言中,使用第三方库是非常方便的。许多优秀的第三方库和框架可以帮助我们快速地开发应用程序,同时也减少了我们自己编写代码的工作量。但是如何正确地使用第三方库,确保其稳定性和可靠性,是我们必须了解的一个问题。本文将从以下几个方面介绍如何使用第三方库,并结合具体例子进行讲解。一、第三方库的获取Go语言中获取第三方库有以下两种方式:1.使用goget命令首先

如何在PHP中使用协程?如何在PHP中使用协程?May 12, 2023 am 08:10 AM

随着传统的多线程模型在高并发场景下的性能瓶颈,协程成为了PHP编程领域的热门话题。协程是一种轻量级的线程,能够在单线程中实现多任务的并发执行。在PHP的语言生态中,协程得到了广泛的应用,比如Swoole、Workerman等框架就提供了对协程的支持。那么,如何在PHP中使用协程呢?本文将介绍一些基本的使用方法以及常见的注意事项,帮助读者了解协程的运作原理,以

如何在PHP中使用变量函数如何在PHP中使用变量函数May 18, 2023 pm 03:52 PM

变量函数是指可以使用变量来调用函数的一种特殊语法。在PHP中,变量函数是非常有用的,因为它可以让我们更加灵活地使用函数。在本文中,我们将介绍如何在PHP中使用变量函数。定义变量函数在PHP中,变量函数的定义方式非常简单,只需要将要调用的函数名赋值给一个变量即可。例如,下面的代码定义了一个变量函数:$func='var_dump';这里将var_dump函

如何在 Windows 11 中按需使用 OneDrive 的文件如何在 Windows 11 中按需使用 OneDrive 的文件Apr 14, 2023 pm 12:34 PM

&lt;p&gt;Windows 系统上的 OneDrive 应用程序允许您将文件存储在高达 5 GB 的云上。OneDrive 应用程序中还有另一个功能,它允许用户选择一个选项,是将文件保留在系统空间上还是在线提供,而不占用您的系统存储空间。此功能称为按需文件。在这篇文章中,我们进一步探索了此功能,并解释了有关如何在 Windows 11 电脑上的 OneDrive 中按需使用文件的各种选项。&lt;/p&gt;&lt;h2&gt;如何使用 On

如何在Go中使用WebSocket?如何在Go中使用WebSocket?May 11, 2023 pm 04:17 PM

近年来,WebSocket技术已经成为了Web开发中不可或缺的一部分。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间的通信更加流畅和高效。如今,很多现代的Web应用程序都使用了WebSocket技术,例如实时聊天、在线游戏以及实时数据可视化等。Go语言作为一个现代的编程语言,自然也提供了很好的支持WebSock

如何在Go中使用音频处理?如何在Go中使用音频处理?May 11, 2023 pm 04:37 PM

随着音频处理在各种应用场景中的普及,越来越多的程序员开始使用Go编写音频处理程序。Go语言作为一种现代化的编程语言,具有优秀的并发性和高效率的特点,使用它进行音频处理十分方便。本文将介绍如何在Go中使用音频处理技术,包括读取、写入、处理和分析音频数据等方面的内容。一、读取音频数据在Go中读取音频数据有多种方式。其中比较常用的是使用第三方库进行读取,比如go-

如何在PHP中使用数据聚合函数如何在PHP中使用数据聚合函数May 18, 2023 pm 02:51 PM

数据聚合函数是一种用于处理数据库表中多行数据的函数。在PHP中使用数据聚合函数可以使得我们方便地进行数据分析和处理,例如求和、平均数、最大值、最小值等。下面将介绍如何在PHP中使用数据聚合函数。一、介绍常用的数据聚合函数COUNT():计算某一列的行数。SUM():计算某一列的总和。AVG():计算某一列的平均值。MAX():取出某一列的最大值。MIN():

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。