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;
}