ホームページ >バックエンド開発 >PHPチュートリアル >PHP と Mysql Web アプリケーション開発のコア技術 第 1 回 PHP の基礎-3 コードの整理と再利用 2_PHP チュートリアル

PHP と Mysql Web アプリケーション開発のコア技術 第 1 回 PHP の基礎-3 コードの整理と再利用 2_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:26:31901ブラウズ

この章では、コードを再利用するために呼び出すことができる関数の作成

と、スクリプトのさまざまな部分での変数やデータの操作

について学びました。関数 他のファイルに保存され、これらのファイルはスクリプトに含まれます

3.1 基本的なコードの再利用: 関数

3.1.1 関数の定義と呼び出し

キーワード function は、これが関数であることを php に伝え、その後に関数が続きます。名前 (文字、数字、文字、またはアンダースコアを使用できます)

関数名の後にパラメーター リストが続き、その後に関数本体が続きます。他の言語で同じ名前で異なるパラメーター リストを持つ関数の場合、PHP はこの機能をサポートしません。


コードをコピーします コードは次のとおりです:
function booo_spooky()
{
echo "I am booo_spooky. この名前は問題ありません!
n"; }
function ____333434343434334343()
{
echo <<これは
読めない関数名ですが、
DONEです。
//
// この次の関数名前が生成します:
//
// 解析エラー: 構文エラー、予期しない T_LNUMBER、
//
// /home/httpd/www/phpwebapps/src/chapter03/playing.php
// 行 55 に T_STRING が必要です
//
// 関数名は数字で始めることはできません
//
function 234letters()
{
echo "I am not valid
n";
//
// 拡張文字は使用できます
//
function grüß_dich()
{
echo "拡張文字は問題ありませんが、注意してください!
n";
}
//
// 本当に拡張文字も問題ありません
// ただし、おそらく Unicode 形式で保存する必要があります。
// UTF-8 など (第 5 章を参照)
//
function 日本語のファンクション()
{
echo <<関数名には日本語の文字も使用できますが、
特に注意してください (第 5 章を参照)


3.1.2 関数にパラメータを渡す
パラメータを渡すには。関数に対して、関数を呼び出すときは、パラメータ値を括弧で囲み、カンマで区切る必要があります。渡される各パラメータには、任意の有効な式を指定できます。変数、定数値、演算子の結果、または関数呼び出しの場合もあります。



コードをコピー
コードは次のとおりです:


function my_new_function($param1, $param2, $param3, $param4)
{ echo <<You渡されました:
$param1: $param1
$param3: $param3
param4 < br/> }
//
//
$a = 54; my_new_function($ userName, 6.22e23, pi(), $a or $b);
?>


参照渡し: デフォルトでは、変数の値のみが関数に渡されます。したがって、このパラメーターまたは変数への変更は、関数内でローカルでのみ有効です



コードをコピーします

コードは次のとおりです。


$x = 10
echo "$x is: $x n";
function change_parameter_value($param1)
{
$param1 = 20;
}
echo "$x は: $x
n";
?>
出力: $ x は : 10 $x は :10 関数が値のコピーを単に処理するのではなく、渡された変数を実際に変更することが目的の場合は、参照によって渡された関数を使用できます。これは、& 文字を使用して実行されます


コードをコピーします

コードは次のとおりです:


function increment_variable(&$increment_me)
{
if (is_int($increment_me) | | is_float($increment_me))
{
$increment_me += 1;
}
$x = 20.5;
echo "$x は: $x
n" // 20.5 を出力します。 (&$x );
echo "$x is now: $x
n"; // デフォルトの引数値と呼ばれる 21.5 コードをコピーします以下の通り:

function Perform_sort($arrayData, $param2 = "qsort")
{
switch ($param)
{
case "qsort":
qsort($arrayData); ":
insertion_sort($arrayData);
break;
default:
bubble_sort($arrayData);
break;
}
}
?>


パラメータの可変数:
phpは任意の数のパラメータを置くことができます。関数に、そしてfunc_num_args、func_get_arg、func_get_argsを使用してパラメーター値を取得します


コードは次のとおりです。コードは次のとおりです。 func_get_args() ; foreach ($all_parameters as $index => $value) { echo "パラメータ $index の値は $value
n"
}
echo "-----
n ";
}
print_parameter_values(1, 2, 3, "fish");
print_parameter_values();
?>


3.1.3 関数からの戻り値
その他の言語終了する前に一部のコードのみを実行する コードを実行して呼び出し元に値を返す関数であるサブルーチンとは異なり、すべての PHP 関数は呼び出し元に戻るときに値が関連付けられています。明示的な戻り値のない関数の場合、戻り値は null です



コードをコピー

コードは次のとおりです:

function dos_nothing()
{
}
$ret = dos_nothing() ; echo '$ret: ' . (is_null($ret) ? '(null)' : $ret) 非 null を返したい場合、それを返すには return を使用します 式に関連付けられています


コードをコピーします

コードは次のとおりです:


function is_even_number($number)
{
if (($number % 2) = = 0)
return TRUE;
else return FALSE; ?> 関数から複数の値を返したい場合は、結果を配列として返すのが便利です


コードをコピーします

コードは次のとおりです:


< ;?php
function get_user_name($userid)
{
//
// $all_user_data は一時的に保持するローカル変数 (配列) です
//ユーザーに関するすべての情報
//
$all_user_data = get_user_data_from_db($ userid); // // この関数が返された後、$all_user_data は存在しなくなり、値がなくなりました // return $ all_user_data["UserName"];
}
?>


3.1 .4 関数内の変数スコープ
関数レベルの変数:
それらは宣言された関数内で有効であり、その値は記憶されません関数呼び出しの間



コードをコピーします

コードは次のとおりです:


$name = "Fatima"
echo "$name: $name
n"; function set_name($new_name)
{
echo "$name: $name
n";
$name = $new_name;
set_name("Giorgio"); br/>n";
?>
静的変数: static は、関数呼び出し間で値を変更しないようにするための変数のプレフィックスです。変数が宣言されたときに値が割り当てられている場合、実行時に現在のスクリプトでは、PHP はこの変数に初めて遭遇したときのみ割り当てを実行します

コードをコピーします

コードは次のとおりです:


function increment_me()
{
//値は 1 回だけ 10 に設定されます。 ?>


スクリプト内で宣言された変数 (「グローバル変数」)



コードをコピーします
コードは次のとおりです: < ;?php $name = "Fatima"; $name: $name
n";
function set_name($new_name)
{
echo "$name: $name
n ";
$name = $new_name;
}
set_name( "ジョルジオ");
エコー "$name: $name>n";
l 出力結果:
$name: Fatima
$name:
$name: Fatima
内部群関数にグロバが追加された場合、出力結果
$name: Fatima
$name: Fatima
$name: Giorgio
3.1.5 関数のスコープと可用性
3.1.6 関数を変数として使用する
コードをコピーする コードは次のとおりです:

function Log_to_File($message)
{
// openファイルを作成してメッセージを書き込みます
}
function Log_to_Browser($message)
{
// echo または print 関数を使用して出力します
}
function Log_to_Network($message)
{
// サーバーに接続してメッセージを印刷します
}
//
// 現在デバッグ中なので、画面に書き込むだけです
//
$log_type = "Log_to_Browser"
//
// これで、残りのコード全体で
// を呼び出すことができます。 $log_type(message) を変更するには、単に
// 上記の変数の割り当てを変更します!
//
$log_type("beginning debug Output"); ただし、PHP には、これを実行できない言語構造が多数含まれています。この構造の明白な例は、echo、print、var_dump、print_r、isset、unset、is_null is_type です
3.2 中間コードの再利用: ファイルの使用と組み込み
3.2.1 コードをファイルに整理する
共通機能をグループ化する: If多くの関数を 1 つの場所 (通常はファイル、つまりコード ライブラリ) に保存します
一貫したインターフェイスを生成します



コードをコピーします
コードは次のとおりです: //円は (x, y) + 半径です
function compute_circle_area($x, $y, $radius)
{
return ($radius * pi() * pi())
}
functioncircle_move_location(&$y, & $x , $deltax, $deltay)
{
$x += $deltax;
$y += $deltay;
}
function compute_circumference_of_circle($radius)
{
return array("Circumference" => 2 * $radius * pi());
}
?>


これらの関数を一貫した名前、パラメーターの順序、戻り値で使用すると、コードの失敗や欠陥の可能性を大幅に減らすことができます。


コードをコピーします
コードは次のとおりです: //
// このファイル内のすべてのルーチンは、円が
// の配列として渡されることを前提としています:
// "X" = > pi();
function Circles_compute_circumference($circle)
{
return 2 * $circle["Radius"] * pi()
}
// $circle は BY REFERENCE で渡されます変更されました!!!
関数 Circles_move_circle(&$circle, $deltax, $deltay)
$circle["X"] += $deltax;
$circle["Y"] += $deltay; >


3.2 .2 ファイル名と場所の選択
Web ユーザーが .inc ファイルを開けないようにするには、2 つのメカニズムを使用します。まず、構成するドキュメント ディレクトリ ツリーで、Web サーバーが次のことを行うようにします。ユーザーに参照やロードを許可しないでください
第 16 章 Web アプリケーションの保護で説明されているこれらの操作を実行してから、ユーザーが .php および .html ファイルを参照できるようにブラウザを設定しますが、.inc ファイルは参照できないようにします
この問題を防ぐ 2 番目の方法は、コードをドキュメント ツリーに配置したり、他のディレクトリに保存したりせず、コード内でこのディレクトリを明示的に参照して、常にこのディレクトリを参照するように PHP に指示することです
3.2.3 ライブラリ ファイルを次の場所に含めるスクリプト
include と require、この 2 つの違いは、require はファイルが見つからない場合にエラーを出力するのに対し、include は警告を出力することです。



コードをコピーします
コードは次のとおりです:


require('i_dont_exit.inc');


include と require でファイルを探します
明示的なパスを指定できます:
require("/home/httpd/lib/frontend/table_gen.inc');
require('http://www.cnblogs.com/ lib /datafuncs.inc');
require(d:webappslibsdataconnetions.inc');
明示的なパスが指定されていない場合、php は現在のディレクトリに含まれるファイルを探し、php 内の include_path 設定を探します。 .ini ファイルをディレクトリから取り出します。
Windows では、 include_path=".;c:phpinclude;d:webappslibs" になります。
include と require の内容はすべて含まれています。 script タグ内の は、一般的な php スクリプト処理と同様です。
リスト 3-1 とリスト 3-2 は、インクルードするための php スクリプトと単純なファイルを示します。
リスト 3-1
3.2.4 ページのテンプレート化にインクルードを使用する


サンプル</head> <br><?php <BR>$message = "こんにちは、パードナー"; <BR>include( 'printmessage.inc'); <BR></body> <br><br> スクリプトから関数を移動するときの関数スコープとスコープへの影響インクルードされたファイルにそれらを呼び出す機能 <div class="codetitle"> 関数が別のファイルにあり、このファイルが include と require を介して現在のスクリプトに含まれていない場合、その呼び出しは不正です <span style="CURSOR: pointer" onclick="doCopy('code99965')"> この問題を回避するには、スクリプトの先頭に他のファイルをインクルードするというアイデアです。 <u>共有が問題になる場合</u> 共有ファイルの繰り返しロードを避けるために、require_once() および include_once() 言語構造を使用して、機能または構造 </span> </div> <div class="codebody" id="code99965"> <br>http://www.bkjia.com/PHPjc/323900.html<br><br>www.bkjia.com<br><br>tru​​e<br><br>http://www.bkjia.com/PHPjc/323900.html<br><br>技術記事<br><br>この章では、呼び出し可能な関数を作成してコードを再利用し、関数にパラメーターを渡し、関数から値を返します。 <br> </div> <br><br> <br><br> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="PHP パフォーマンスの最適化により、高度に最適化されたコードが生成される_PHP チュートリアル" href="https://m.php.cn/ja/faq/309086.html">PHP パフォーマンスの最適化により、高度に最適化されたコードが生成される_PHP チュートリアル</a></span><span>次の記事:<a class="dBlack" title="PHP パフォーマンスの最適化により、高度に最適化されたコードが生成される_PHP チュートリアル" href="https://m.php.cn/ja/faq/309088.html">PHP パフォーマンスの最適化により、高度に最適化されたコードが生成される_PHP チュートリアル</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2.html" title="正規表現内のすべての式記号 (概要)" class="aBlack">正規表現内のすべての式記号 (概要)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>