質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

2回答

1894閲覧

関数Aで定義した変数を関数Bに持っていく方法がわかりません

tartnac

総合スコア18

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2018/04/19 18:37

前提

PHPの初歩すらわかっていない人間が無理やり背伸びして「CodeIgniter3」というフレームワークを使い、
何もかもわからない状態で発狂しそうになっています。

【質問】
あるクラス内に関数Aと関数Bがあったとして、関数Aで定義した変数を関数Bに持っていく方法としてはどのようにすべきでしょうか?

PHP

1<?php 2defined('BASEPATH') OR exit('No direct script access allowed'); 3class Test extends CI_Controller { 4 public function kansuuA() 5 { 6 $hensuuA = 1; //←これを 7 } 8 public function kansuuB() 9 { 10 echo $hensuuA; //←こっちで使いたい 11 } 12}

もしかしてこうする……?

PHP

1<?php 2defined('BASEPATH') OR exit('No direct script access allowed'); 3class Test extends CI_Controller { 4 public function kansuuA() 5 { 6 $hensuuA = 1; 7 return $hensuuA; //returnとかいうのを使うと 8 } 9 public function kansuuB($hensuuA) 10 { 11 //↑kansuuBの引数に指定することで 12 echo $hensuuA; //←こっちでも使えるようになる!? 13 } 14}

それともこう……?

PHP

1<?php 2defined('BASEPATH') OR exit('No direct script access allowed'); 3class Test extends CI_Controller { 4 public function kansuuA() 5 { 6 global $hensuuA = 1; //global変数にしたら 7 } 8 public function kansuuB() 9 { 10 echo $hensuuA; //←いきなりこっちでも使えるようになる!? 11 } 12}

どうしたらいいの……

自分で質問してて初心者臭がプンプンしますが、しかしやっぱりわからないのです。どなたかこんな質問にもお答えいただける奇特な方がおられましたら、お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/04/20 00:26

具体的に、「どのようなこと」がしたいのでしょうか。たとえば「別なところに定義したものを2つの関数から呼び出す」という方法ではだめなのでしょうか。
tartnac

2018/04/20 01:37

どうやらまさにその方法がベストで、その方法がしたかったようです。お手数をおかけいたしました。
guest

回答2

0

ベストアンサー

CIで動くかどうかは確認できてないですけど、
CLASS内ならプロパティにしてしまえば簡単に共有できますね。

php

1class Test extends CI_Controller { 2 protected $hensuuA = 0; 3 public function kansuuA() 4 { 5 $this->hensuuA = 1; 6 } 7 public function kansuuB() 8 { 9 echo $this->hensuuA; 10 } 11} 12

ただし、いずれにしてもTest::kansuuA()が先に呼び出されている前提でkansuuBを利用しなければならないので注意が必要です。
コンストラクタで初期値置いておいたほうがいいかもしれません(それか、サンプルのように初期値に何か入れておく)。TestクラスはkansuuBがどのような場面で利用されるのか知らないわけですし。

いずれにしても、いきなりフレームワークではなく、オブジェクト指向含めて基礎の基礎からきちんと学ばれた方がこの先苦労しなくて済みます。
きちんと理解してからフレームワークに入ることでフレームワークの機能を存分に扱えるようになるからです(たまにフレームワークをマニュアルからでなくフレームワークのソースコードから見ていって機能を使うことがあるからです)

投稿2018/04/19 21:59

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tartnac

2018/04/20 01:54

まさに知りたかった答えそのものズバリが書かれてて感激です!!昨日、初めてteratailに質問を投稿して、わくわくしながら今日開いてみたら……こんなに丁寧に回答してくださっていて本当に嬉しいです。 やはりいきなりフレームワークというのはどうなんだ、というのはわかっているつもりなのですが、これを使わなければいけないという状況でやむにやまれず……。たまにフレームワークをソースコードから見ることがあるとのことですが、いつかこれができるようになりたいです。それができる人は、相当な実力者だと思いますので(^-^) とりあえずこれで勉強しようにもイマイチわからなくて先に進めない状態から、もうちょっと先に進めそうです。ありがとうございました!!
m.ts10806

2018/04/20 01:56

いずれにしても今回のフレームワークはPHPで作られています。 PHPが理解できないとフレームワークが使いこなせないことにかわりはないわけです。 「フレームワークで作る」というより「PHPで作るところをフレームワークでちょっと効率化している」という頭でやっていくと理解が進むかもしれません。
tartnac

2018/04/20 01:59

ありがとうございます。そのように意識してやってみます!
m.ts10806

2018/04/20 02:02

なので、フレームワークのちょっとした機能を利用する際も「どのようにしてその結果がでているのか」というのを追ってみてもいいかもしれません。 分からない表現は公式ドキュメントも含めて調べれば良いですし、今回の質問のように聞いても良いですし。 何事にも結果がでているのには必ず理由があるので(プログラムは指示したとおりにしか動きません)、 その部分を「なぜ」と突き詰めていくと成長は早いですよ。 がんばってください。
tartnac

2018/04/20 02:09

自分なりにGoogle検索で色々と調べてみたのですが、マニュアルはいっぱい出てくるのですが「結局、この場合はどうしたらいいんだろう」というところから抜け出せなくて。上級者の人が一言『このやり方でできるから、これ勉強しといて』って言ってくれたらなぁと思っておりました。ありがとうございます!
m.ts10806

2018/04/20 02:13

結局プログラミングをしていく上でマニュアルを読み解く力は必要です。 なぜならマニュアルが最も確実な教科書だからです。そういった意味でマニュアルを読む以上の近道はありません。 ほとんどの場合、例文も載っているので実装のイメージもつきやすいと思います。 まずはマニュアル通りに動かしてみて、(できれば使用する場面を想像しながら)身につけていくと良いです。
guest

0

1番目のサンプル

function kansuuA() で使われている$hensuuAと
function kansuuB($hensuuA) で使われている$hensuuAは別物です。

回答

PHP

1// 関数の定義部 2public function kansuuA() 3 { 4 $hensuuA = (何かの計算、処理); 5 return $hensuuA; //←これを 6 } 7 8public function kansuuB(hensuuB) 9 { 10 //↑kansuuBの引数に指定することで 11 echo $hensuuB; //←こっちでも使えるようになる!? 12 } 13 14// ここから関数を使った処理 15rtnhensuuA=kansuuA(); //←これはfunction kansuuA() の戻り値$hensuuAに同じ 16 17// 関数kansuuBを使った処理 18kansuuB(rtnhensuuA);

参考
ttps://www.phpbook.jp/tutorial/function/index3.html

投稿2018/04/19 20:06

kawakawa2018

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/04/20 01:00 編集

「あるクラス内に」という前提があるのでご提示のコードではちょっと要件が合いません。 また、kansuuA()の受け取り手とkansuuB()の引数がPHPの変数になっていません。 ※細かいですが参考URLは冒頭hを削ったものではなく完全URLでリンク貼ってあげると丁寧です。
tartnac

2018/04/20 01:46

>> mts10806さん おぉ、ホントだ……!そこに一瞬で気づかれるとは。すごい(何度も読み返してやっとわかりました) >>kawakawa2018さん なるほど!returnを使うといきなり他のスコープで使えるようになるわけではないんですね! 一旦外で変数に入れてやって、それをまた関数の中に入れてあげなきゃいけないのか……こんなこともわかっていなかったので助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問