PHPでクラスの中にクラスを指定するのは不可能なことなのでしょうか?

<例>
name.php
<?
require("list.ini");

$list = new Select;
$list->doSelect($a);
<中略>
?>

list.ini
<?
class Select{
function doSelect($qu){
require("col.ini");
$col = new Col;
$col->doCol($ab,$ac);
<中略>
}
?>

col.ini
<?
class Col{
function doCol($a,$b){

<中略>
}
?>

とすると
Fatal error: Cannot redeclare class
エラーがでます。

不可能なのでしょうか?

よろしくお願いします。

A 回答 (2件)

書き方の問題ですね。


col.ini のクラス宣言部
class Col{
 省略
}

list.ini
の先頭に
<?
class Col{
 省略
}
class Select{
function doSelect($qu){
$col = new Col;
$col->doCol($ab,$ac);
 省略
}
}
の様に1つのファイルにまとめて記述してしまうか、
または、

list.ini
の先頭でclass Select{
の前に
require_once("col.ini");
class Select{
function doSelect($qu){
// require("col.ini"); // この行は削除
$col = new Col;
 省略
}
}

の様にすれば良いと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
classが1ファイルに2つ書けるとは知りませんでした。

お礼日時:2003/11/09 22:20

list.iniの


class Select 内のfunctionの中ではなく、
class Select の外で呼び出してはどうでしょう?

「classの中にclass」というよりも、
functionの中にclassを書くことは出来ないと思いますよ。

なので、

list.ini
<?
require "col.ini";
class Select{
$col = new Col;
<中略>
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QPHPにてクラスを配列にすることは可能でしょうか。

PHPにてクラスを配列にすることは可能でしょうか。

環境はPHP5です。
現在下記のようなクラスを作成しました。

class Ary_c {
var $v1;

// コンストラクタ
function Ary_c() {
$this->v1 = "test";
}
}

このクラスをC++言語などで出来るような、
クラスの配列として扱いたいのです。

C++だとたとえば10個の要素があるクラスの配列は
Ary_c t[ 10 ];
みたいな感じで宣言できます。

こういったことをPHPでやることは可能でしょうか。

Aベストアンサー

こんな感じ

$t = array();
for ($i = 0; $i < 10; $i++) {
$t[$i] = new Ary_c();
}

print ($t[1])->v1;

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

Q連想配列からの値の取り出し

お世話様です。

タイトルにもありますが連想配列を作成した後(以下に記述例)に
その配列からキーを指定して値を取得したいと思っております。
array_keys関数だと値を指定してキーを取得するみたいで
うまくいきませんでした。
何かよい方法ありませんでしょうか?

//配列に格納
while (条件) {
  $aParaOra += array((キー) => (値));
}

Aベストアンサー

解答番号No.1の者です。

ちなみに、キーの指定なしで全部取得するのであれば、
array_values($aParaOra)
で、配列化されたものが返ってきます。

もしくは、以下のようにforeachでループすれば、
キーと値を分離して取得できます。
foreach ($aParaOra as $key => $value) {
# $aParaOra[$key]の値が、$value
}

質問者さんが何をしたいのかがいまいちピンときません。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

QPHP4、PHP5 1ファイル複数クラスのルール 

とあるPHP4で書かれたスクリプトを見ていたら、1つのファイルに複数のクラスが書いてありました。

1つのファイルに1つのクラスを推奨という記述は見かけるのですが、
PHPの仕様としてはどんな感じになっているのでしょうか?

「javaで同一ファイル内にpublicなクラスを複数作成できない」てのを見かけたのですが、PHPにはこんなルールはあるのでしょうか?

また1ファイル複数クラスの記述に関して、PHP4とPHP5で、違いがあれば
知りたいです

Aベストアンサー

仕様としては問題ありません。

http://www.php.net/manual/ja/language.oop5.basic.php

扱い的にはfunctionと同じです。別ファイルにしてrequireしないといけないということもありません。分けるとすればあくまでも作成側の都合です。

php4のクラスはphp5(以降)とかなり趣きが違いますが、class クラス名に続く波括弧内に記述するという点は同じです。

http://www.php.net/manual/ja/keyword.class.php

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報