define("MYSQL_OPEN_LOGS",true);
クラス mysqliHelp
{
private $db;
public function __construct()
{
//如果要查询日志log的话,怎么办
}
public function __get($name )
{
//echo " __GET:",$name;
if(in_array($name,array("db"),true))//またはisset($this->$name)
return $this->$name;
null を返します。
}
public function connect($host,$user,$pass,$db,$charSet='utf8',$force=false)
{
if($this->db && ($this->gt ;db インスタンス of mysqli) && !$force)
{
return ;
}
$this->db=new mysqli($host,$user,$pass,$db);
if (mysqli_connect_error()) {
die('接続エラー (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
$this->db->set_charset($charSet);
}
//$dbname string
// 成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
function select_db ($dbname )
{
return $this->db-> ;select_db($dbname);
}
//$query mysqli_result
//$resulttype int MYSQLI_ASSOC、MYSQLI_NUM、または MYSQLI_BOTH。デフォルトは MYSQLI_BOTH です。
// 戻り值 フェッチされた行に対応する文字列の配列を返します。結果セットに行が存在しない場合は NULL を返します。
function fetch_array(/*mysqli_result*/ $query, $resulttype = MYSQLI_ASSOC)
{
//var_dump(!null);
if(!$query || !($query instanceof mysqli_result))
return NULL;
return $query->fetch_array($resulttype);//
}
function data_seek($result,$offset)
{
return $result->data_seek($offset);
}
function fetch_assoc($query)
{
return $query->fetch_assoc();// 关联数组
}
function fetch_row($query)
{
return $query-> fetch_row();// インデックス数組、数字0,1。例。。
}
function fetch_fields($query)
{
return $query->fetch_fields();
}
//$query string
//$resultmode int
// 成功した場合は TRUE を返し、失敗した場合は FALSE を返します。SELECT、SHOW、DESCRIBE、または EXPLAIN の場合、mysqli_query() は結果オブジェクトを返します。
public function query($sql ,$resultmode=MYSQLI_STORE_RESULT )
{
if(MYSQL_OPEN_LOGS) {
$sqlstarttime = $sqlendttime = 0;
$mtime =explode(' ', microtime());
$sqlstarttime = $mtime[1]+ $mtime[0] ;
}
//真正查询
$query=$this->db->query($sql,$resultmode);
if(MYSQL_OPEN_LOGS) {
// sleep(1);
$mtime =explode(' ', microtime());
$sqlendttime = $mtime[1] + $mtime[0] ;
$sqlQueryTime =number_format($sqlendttime - $sqlstarttime,6);
//dblogs($sql, $sqlQueryTime,1);
$explain = array();
$info = $this->db->info;
if($query && preg_match("/^(select )/i", $sql)) {
$explain = $this->fetch_array($this->db->query('EXPLAIN '.$ SQL)、MYSQLI_ASSOC );
}
$GLOBALS['mysql_debug_query'][] = array('sql'=>$sql, 'time'=>$sqlQueryTime, 'info'=>$info, 'explain'=>$explain );
}
if(!$query)
{
$this->halt('MySQL Query Error', $sql);
}
return $query;
}
// 戻り値 mysqli_stmt对象
function prepare($sql)
{
return $this->db->prepare($sql);
}
functionaffected_rows() {
return $this->db->affected_rows;
}
関数 error()
{
return $this->db->error;
}
関数 errno()
{
return $this->db->errno;
}
//結果はありません
function num_rows($query)
{
return $query->num_rows;
}
//返值 int 結果セットからのフィールドの数。
//別の方法で mysqliHelp->db->field_count を返すこともできます。
function num_fields($query)
{
return $query->field_count;
}
function free_result($query)
{
//all methods are equivalent;
$query->free();
//$query->free_result();
//$query->close();
}
function insert_id()
{
if(($id = $this->db->insert_id)>= 0)
{
return $id;
}else
{
$idArr=$this->fetch_array($this->query("SELECT last_insert_id() as id"));
return intval($idArr[0]);
}
//return ($idArr=$this->fetch_array($this->query("SELECT last_insert_id() as id")))[0]
//return ($id = $this->db-insert_id)>= 0 ? $id : 0 ;
}
function close() {
return $this->db->close();
}
function halt($message,$sql)
{
$dberror = $this->error();
$dberrno = $this->errno();
$help_link = "http://faq.comsenz.com/?type=mysql&dberrno=".rawurlencode($dberrno)."&dberror=".rawurlencode($dberror);
echo "
プロパティ
$ mysqli-> pheprected_rows mysqli_affted_rows()n/a前のmysql操作の影響を受けた列の数を取得します。 $mysqli->connect_errno mysqli_connect_errno() N/A to connect_error() N/A 最後の接続呼び出しのエラー コードを説明する文字列を返します。 A 文字列で記述された最近の関数呼び出しによって生成されたエラー コードは $MySQLI です。 - & GT; Field_count mysqli_field_count () n/a 最新のクエリで取得された列の数に戻ります
$ mysqli- & gt; Host_info I_get_host_info () n/a 接続タイプで使用できる文字列を返します。 ) N/A mysql サーバーのバージョン情報に戻る
$mysqli->server_version mysqli_get_server_version() N/A t ;insert_id mysqli_insert_id() N/A 自動的に生成され、最後のクエリで使用された ID を返します
$mysqli->sqlstate mysqli_sqlstate() N/A 前の Mysql 操作の SQLSTATE エラーを返します
$mysqli-> warning_count _warning_count() N/A 指定されたリンクの最後のクエリの警告の数を返します
メソッド
mysqli->autocommit( ) mysqli_autocommit() N/A データベースの自動コミット機能をオンまたはオフにします
mysqli->change_user() mysqli_change_user() N/A 指定されたデータベース接続のユーザーを変更します
mysqli->character_set_name(), mysqli ->client_encoding mysqli_character_set_name() mysqli_client_encoding() データベース接続のデフォルトの文字セットを返す
mysqli->close() mysqli_close() 前を閉じる N/A データベース接続を開く
Mysqli->commit() mysqli_commit() N /A 現在のトランザクションを送信します
Mysqli::__construct() mysqli_connect() N/A Mysql サーバーへの新しい接続を開きます [注: 静的メソッド]
Mysqli ->debug() mysqli_debug() N/A デバッグ操作を実行します
mysqli->dump_debug_info() mysqli_dump_debug_info() N/A デバッグ情報をログにダンプします
mysqli->get_charset() mysqli_get_ charset() N/A オブジェクトの文字セットを返します
Mysqli->get_connection_stats() mysqli_get_connection_stats() N/A クライアント接続の統計を返します。mysqlnd でのみ使用できます。
mysqli->get_client_info() mysqli_get_client_info() N/A 文字列で記述された Mysql クライアントのバージョンを返します。
mysqli->get_client_stats() mysqli_get_client_stats() N/A 各クライアント プロセスの統計を返します。 mysqlnd でのみ使用できます。
Mysqli->get_cache_stats() mysqli_get_cache_stats() N/A クライアントの zval キャッシュ統計を返します。 mysqlnd でのみ使用できます。
Mysqli->get_server_info() mysqli_get_server_info() N/A ドキュメントなし
Mysqli->get_warnings() mysqli_get_warnings() N/A Mysqli::init( ) mysqli_init() N/A mysqli を初期化し、リソース タイプを返すmysqli_real_connect によって使用されます。 [オブジェクトではなく、返される $mysqli オブジェクト]
Mysqli->kill() mysqli_kill() N/A Mysql スレッドを強制終了するようにサーバーに要求します
Mysqli->more_results() mysqli_more_results() N/A他にクエリの問い合わせがあるかどうかを確認します。 /A from multi_query 次の結果セットを準備します
mysqli->options() mysqli_options() mysqli_set_opt() オプションを設定します
mysqli->ping() N/A サーバー接続に ping を実行するか、接続が失われた場合は再接続を試行します
mysqli->prepare() mysqli_prepare() N/A SQL ステートメントの実行を準備します
mysqli->query() mysqli_query() N/ A データベース上でクエリを実行します
mysqli->real_connect() mysqli_real_connect () N/A Mysql サーバーへの接続を開きます
Mysqli->real_escape_string()、mysqli->escape_string() mysqli_real_escape_string() mysqli_escape_string()文字列内の SQL ステートメントで使用される特殊文字をエスケープします。この変換では、接続の現在の文字セットが考慮されます。
mysqli->real_query() mysqli_real_query() N/A 执行一个SQL查询
mysqli->rollback() mysqli_rollback() N/A 回滚当前事务
mysqli->select_db() mysqli_select_db() N/A 为数据库查询选择默认数据库
mysqli->set_charset() mysqli_set_charset() N/A 设置默认的客户端字符集
mysqli->set_local_infile_default() mysqli_set_local_infile_default() N/A 清除用户为load data local infile命令定义的处理程序
mysqli->set_local_infile_handler() mysqli_set_local_infile_handler() N/A 设置LOAD DATA LOCAL INFILE命令执行的回调函数
mysqli->ssl_set() mysqli_ssl_set() N/A 使用SSL建立安装连接
mysqli->stat() mysqli_stat() N/A 获取当前系统状态
mysqli->stmt_init() mysqli_stmt_init() N/A 初始化一个语句并且返回一个mysqli_stmt_prepare使用的对象
mysqli->store_result() mysqli_store_result() N/A 传输最后一个查询的结果集
mysqli->thread_id() mysqli_thread_id() N/A 返回当前连接的线程ID
mysqli->thread_safe() mysqli_thread_safe() N/A 返回是否设定了线程安全
mysqli->use_result() mysqli_use_result() N/A 初始化一个结果集的取回
*/
/*
MySQL_STMT
面向对象接口 过程化接口 别名(不要使用) 描述
属性
$mysqli_stmt->affected_rows mysqli_stmt_affected_rows() N/A 返回最后一条倍执行的语句改变,删除或插入的总行数
$mysqli_stmt->errno mysqli_stmt_errno() N/A 返回最近一次语句调用的错误代码
$mysqli_stmt->error mysqli_stmt_error() N/A 返回最后一条语句错误的字符串描述
$mysqli_stmt->field_count mysqli_stmt_field_count() N/A 返回给定语句得到的字段数量
$mysqli_stmt->insert_id mysqli_stmt_insert_id() N/A 获取前一个INSERT操作生成的ID
$mysqli_stmt->num_rows mysqli_stmt_num_rows() N/A 返回语句结果集中的行数
$mysqli_stmt->param_count mysqli_stmt_param_count() mysqli_param_count() 返回给定语句中参数数量
$mysqli_stmt->sqlstate mysqli_stmt_sqlstate() N/A 返回前一个语句操作的SQLSTATE错误代码
方法
mysqli_stmt->attr_get() mysqli_stmt_attr_get() N/A 用于获取语句属性的当前值
mysqli_stmt->attr_set() mysqli_stmt_attr_set() N/A 用于修改prepared语句的行为
mysqli_stmt->bind_param() mysqli_stmt_bind_param() mysqli_bind_param() 将一个变量作为参数绑定到prepared语句上
mysqli_stmt->bind_result() mysqli_stmt_bind_result() mysqli_bind_result() 将一个变量绑定到一个prepared语句上用于结果存储
mysqli_stmt->close() mysqli_stmt_close() N/A 关闭一个prepared语句
mysqli_stmt->data_seek() mysqli_stmt_data_seek() N/A 查看语句结果集中的任意行
mysqli_stmt->execute() mysqli_stmt_execute() mysqli_execute() 準備されたクエリを実行します
mysqli_stmt->fetch() mysqli_stmt_fetch() mysqli_fetch() 準備されたステートメントから修飾された変数に結果をフェッチします
mysqli_stmt->free_result ( ) mysqli_stmt_free_result() N/A 指定されたステートメント処理によって保存された結果セットによって占められていたメモリを解放します
$mysqli_stmt->get_result() mysqli_stmt_get_result N/A mysqlnd についてのみ利用可能なドキュメントはありません。
mysqli_stmt->get_warnings() mysqli_stmt_get_warnings() N/A ドキュメントなし
Mysqli_stmt-more_results() mysqli_stmt_more_results() N/A mysql nd.d のみドキュメントなし。 ️ $mysqli_stmt->next_result() mysqli_stmt_next_result() N/A mysqlnd についてのみ利用可能なドキュメントはありません。
mysqli_stmt->num_rows() mysqli_stmt_num_rows() N/A 属性を表示 $mysqli_stmt->num_rows
mysqli_stmt->prepare() mysqli_stmt_prepare() N/A SQL ステートメントを実行準備します
) mysqli_stmt_reset() N/A準備されたステートメントをリセットする
mysqli_stmt->result_metadata() mysqli_stmt_result_metadata() mysqli_get_metadata() 準備されたステートメントから結果セットのメタデータを返す
mysqli_st mt->send_long_data() mysqli_stmt_send_long_data() () データブロックを送信
mysqli_stmt->store_result ()オブジェクト指向インターフェイス 手続き型インターフェイス エイリアス (使用しないでください) 説明
属性
->lengths mysqli_fetch_lengths () N/A の各列の値の長さを返します。結果セットの現在の行を検索し、配列を返します
qli_data_seek() N/A 結果内の結果ポインターを任意の行に調整します
Mysqli_result->fetch_all() mysqli_fetch_all() N/A すべての結果行をフェッチし、次のように返します関連データ、数値インデックス付き配列、またはその両方の結果セット。 mysqlnd でのみ使用できます。
mysqli_result->fetch_array() mysqli_fetch_array() N/A 結果の行を連想配列、数値インデックス配列、またはその両方としてフェッチします
mysqli_result->fetch_assoc() mysqli_fetch_assoc() N/ A 行をフェッチする連想配列メソッドを使用した結果の配列
Mysqli_result->fetch_field_direct() mysqli_fetch_field_direct() N/A 単一フィールドのメタデータを取得します
フィールド
Mysqli_result->fetch_fields() mysqli_fetch_fields() N/A を表すオブジェクト配列を返します結果セットフィールド
Mysqli_result->fetch_object() mysqli_fetch_object() N/A 結果をオブジェクトとして返す 集中された現在の行
mysqli_result->fetch_row() mysqli_fetch_row() N/A 結果の行を列挙配列として返す
mysqli_result->field_seek() mysqli_field_seek() N/A 結果ポインタを特定のフィールドの先頭に設定します
mysqli_res ult->free()、mysqli_result->close、mysqli_result->free_result mysqli_free_result() N/ A 結果セットに関連付けられたメモリを解放します
*/
/*MYSQLI_STORE_RESULT と MYSQLI_USE_RESULT の違いに注意してください
実際、これら 2 つのパラメータの違いは依然として非常に大きいです。
(1) 違いは、サーバーから結果セットの行を取得する点にあります。
(2) MYSQLI_USE_RESULT はクエリを開始しますが、実際には行を取得しません
(3) MYSQLI_STORE_RESULT はすぐにすべての行を取得します
(4) MYSQLI_STORE_RESULT 結果セットがサーバーから取得されると、行が抽出され、それらの行にメモリが割り当てられますクライアントに格納されているため、mysqli_fetch_array() への以降の呼び出しではエラーが返されません。これは、mysqli_fetch_array() による NULL の戻りは常に結果セットの終わりを示すためです。結果セットに到達しました。
(5) MYSQLI_USE_RESULT 自体は行を取得せず、行ごとの取得を開始するだけです。つまり、
mysqli_fetch_array() を自分で完了するには行ごとに呼び出す必要があります。この場合、通常の状況では、mysqli_fetch_array() が NULL を返すということは、結果セットの最後に到達したことを示していますが、サーバーとの通信中にエラーが発生したことを示している可能性もあります。
MYSQLI_USE_RESULT の場合、クエリが mysqli_result オブジェクトを取得した後、data_seek を実行するとエラーが発生します。理由は、
mysqli_result::data_seek() [mysqli-result.data-seek]: 関数は MYSQL_USE_RESULT では使用できません。 MYSQLI_USE_RESULT を使用すると、MYSQLI_STORE_RESULT には多くのメモリと処理が必要になります。結果セット全体がクライアント上に保持されるため、メモリの割り当てとデータ構造の作成に非常にコストがかかります。一度に複数の行を取得する場合は、MYSQLI_USE_RESULT を使用できます。
MYSQLI_USE_RESULT は、毎回処理される 1 行に十分なスペースのみが割り当てられるため、メモリ要件が低くなります。これは、結果セット用の複雑なデータ構造を作成する必要がないため、高速になります。
一方、MYSQLI_USE_RESULT はサーバーに大きな負荷をかけるため、クライアントがすべての行を取得するのに適切であると判断されるまで、結果セット内の行を保持する必要があります。
*/
}
$dbHelper=new mysqliHelp;
$dbHelper->connect('localhost', 'root', '', 'tt');
//$dbHelper->db->select_db("tt");
//$dbHelper->db->set_charset("utf8");
//此処如果是MYSQLI_USE_RESULT,下の$dbHelper->data_seek($query,10);就会出错
$query=$dbHelper->query("製品制限22からid,cateid,titleを選択してください",MYSQLI_STORE_RESULT );
//$query=$dbHelper->query("製品セットの更新 createtime=UNIX_TIMESTAMP() 制限 22");
//$query=$dbHelper->query("insert into `product`(`cateid`,`title`,`text`,`createtime`) 値 (2,'test','content',1284822691) )");
//$query=$dbHelper->query("id=1 の `product` から削除");
//$query=$dbHelper->query("product(id,cateid,title,text,createtime) 値に置き換えます(1,2,'これはデモです','テスト',UNIX_TIMESTAMP())") ;
echo $query->num_rows."总数";
//var_dump($query);
//$row=$dbHelper->fetch_array($query);
//var_dump($row);
//finfo = $dbHelper->fetch_fields($query);
//var_dump($finfo);
// foreach ($finfo as $val) {
// printf("Name: %sn", $val->name);
// printf("テーブル: %sn", $val->table);
// printf("最大長さ: %dn", $val->max_length);
// printf("フラグ: %dn", $val->flags);
// printf("Type: %dnn", $val->type);
// }
//結果が更新または削除操作の影響を受けた行数である場合、num_rows が null、 num_fields が null
//
$dbHelper->data_seek($query,10);
$row=$dbHelper->fetch_row($query);
var_dump($row);
echo "影响行数:", "
";
var_dump($dbHelper->affected_rows());
//var_dump($dbHelper->db->affected_rows );
echo "查询行数","
";
var_dump($dbHelper->num_rows($query));
echo "列数:","
";
var_dump($dbHelper->num_fields($query));
//第1种
$sql="select id,cateid,title from product where cateid=? and title like ? and createtime
$stmt=$dbHelper->prepare($sql);
var_dump($stmt);
$stmt->bind_param('is',$cateid,$title);
$title="%%";
$cateid=10;
$stmt->execute();
$stmt->bind_result($col1, $col2,$col3);
/* 値を取得 */
while ($stmt->fetch()) {
printf("%s %s"."
", $col1, $col3);
}
echo "
";
$title="%%";
$cateid=4;
$stmt->execute();
$stmt->bind_result($col1, $col2,$col3);
/* 値を取得 */
while ($stmt->fetch()) {
printf("%s %s %s"."
", $col1, $col2,$列3);
}
$stmt->close();
//第2种
$stmt=$dbHelper->db->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('is',$cateid,$title);
$title="%%";
$cateid=10;
$stmt->execute();
$stmt->bind_result($col1, $col2,$col3);
/* 値を取得 */
while ($stmt->fetch()) {
//printf("%s %s"."
", $col1, $col3);
}
echo "
开開始multi_query:
";
//multi_query の例
//multi_query() メソッドの戻り値、および //mysqli のプロパティ errno、error、info などは、最初の SQL コマンドにのみ関係し、2 番目以降のコマンドが存在するかどうかを判断することはありません実行時に問題が発生したため、 //multi_query() メソッドの実行時に戻り値が TRUE になり、その後のコマンドの実行時に問題が発生したことを意味しません。
$sql="cateid=4 の製品から id、cateid、title を選択;";
$sql.="cateid=10 の製品から id,cateid,title を選択";
$query=$dbHelper->db->multi_query($sql);
if($query)
{
do {
/* 最初の結果セットを保存 */
//下側两种方法有什么区别?
// if ($result = $dbHelper->db->store_result()) {
// while ($row = $result->fetch_row()) {
// $data[]=$row ;
// }
// $result->free();
// }
if ($result = $dbHelper->db->use_result()) {// 戻り値 mysqli_result 型
//$result->data_seek(0);// 戻り値
while ($ row = $result->fetch_row()) {
$data[]=$row;
}
//$result->close();
}
/* 分割印刷 */
if ($dbHelper->db->more_results()) {
printf("-----------------n ");
$data[]="_______________________________";
}
} while ($dbHelper->db->next_result());
}
var_dump($data);
//終了;
//行事务の例
//保護操作の表時 innodb タイプの表
//結果が MyISAM、逻出错の话、会行すべての操作、不回滚
$price=1;
$成功=true;
$dbHelper->db->autocommit(0);
$result=$dbHelper->query("update product set cateid=cateid-$price where id=1000" );
if(!$result || $dbHelper->affected_rows()!=1)
{
$success=false;
}
$result=$dbHelper->query("update product set cateid=cateid+$price where id=2");
if(!$result || $dbHelper->affected_rows()!=1)
{
$success=false;
}
if($success)
{
$dbHelper->db->commit();
「成功」をエコーします。
}else
{
$dbHelper->db->rollback();
「失败」をエコーします。
}
$dbHelper->db->autocommit(1);
//var_dump( $dbHelper->insert_id());
var_dump($mysql_debug_query); //打印sql查询情報
//
?>

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
