PHPで外部関数からデータを受け取る方法(引数のリファレンス渡し(参照渡し))

PHP C言語

PHPで外部関数からデータを受け取る方法として、最初に思つくのが戻り値だと思いますが、引数をリファレンス渡しとすることで、呼び出し元で外部関数のデータを受け取ることができます。
(厳密には”受け取る”ではありませんが、分かりやすくあえてこう書きます。)

下記の記事の”common/common.php”内で定義している“get_database_data関数”でリファレンス渡し(参照渡し)を行っていますので、”get_database_data関数”を例に解説します。

引数のリファレンス渡し(参照渡し)外部関数呼び出し元コード

<?php
/* 外部ファイル読み込み */
require_once('common/common.php');
/* データベース関係の処理 */
get_database_data($aaa,$bbb,$ccc);
$dbh = new PDO($aaa,$bbb,$ccc);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
?>

get_database_data関数の引数に、$aaa、$bbb、$cccを指定しています。
(わかりやすくするため、$aaa、$bbb、$cccという変数名にしています。)
そのあとに、データベースにアクセスする処理を行っています。

データベースのアクセス方法については、下記記事で紹介しています。

引数のリファレンス渡し(参照渡し)外部関数コード

<?php
function get_database_data(&$dsn,&$user,&$password){
    $dsn = 'mysql:dbname=inventorycontrolsystem;host=localhost;charset=utf8';
    $user = 'root';
    $password ='';
}
?>

get_database_data関数の引数全てに“&(アンパサンド)”が付いています。
この”&(アンパサンド)”をつけることによってリファレンス渡し(参照渡し)となります。

get_database_data関数の引数がリファレンス渡し(参照渡し)となっているので、各引数に設定したデータを呼び出し元で受け取ることができます。($dsnは$aaa、$userは$bbb、$passwordは$ccc。)

余談

私はC言語歴が一番長いので、覚え方としてはポインタ(アドレス変数)が一番しっくりきました。

#include <stdio.h>
void dataset(char *, char *);

int main(void)
{
    char a=0;
    char b=0;
    dataset(&a, &b);
    printf("a=%d, b=%d\n", a, b);/* a=1, b=2 */
    return 0;
}
void dataset(char *c, char *d){
    *c = 1;
    *d = 2;
}