• 締切済み

PHPの関数の動き方が分かりません。

PHPの関数の動き方が分かりません。 Wordpressというブログシステムを使っていますが、 問題が発生しております。 (メニューが2重表示される,関数の2重呼び出しはないことを確認しています。) http://okwave.jp/qa/q5988841.html 関数その物、もしくはデータベースの不具合を疑っておりますが、 以下の関数のPHPコードの読み方が分かりません。(プログラム自体は経験あるので、読み方が分かれば障害がどこか、ある程度判別できると思います。) function get_constructor_menu($before = '', $after = '') { global $main; $main->getMenu($before, $after); } ご存じの方教えていただけませんでしょうか?

  • CSS
  • 回答数2
  • ありがとう数26

みんなの回答

回答No.2

最終的にメニューを作っているのは、 libs/Constractor/Main.php の173行目あたり、 function getMenu($before = '', $after = '') { } です。 205行目あたり echo $nav_menu; 221行目あたり wp_list_pages($arg); で、2回ページメニューが出力しているような感じです。 何かロジックも怪しげですが、とりあえず、どっちかをコメントにすればメニューは一つになります。それによる副作用は保証できません。 試したのは、WordPress3.0です。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

引数が省略されてもクラスのメンバ関数呼び出しが出来るようにラッピングしてるのかな get_constructor_menu( ); で $main->getMenu('', ''); が実行される

abillionaire
質問者

補足

解説ありがとうございます。 プログラム経験があるといっても、JAVAを簡単に学んだ程度なので、 もう少し詳細を教えていただけませんでしょうか?

関連するQ&A

  • 【PHP】index.phpの実行エラー

    themeという関数エラーと思いますが、どのようにしたらindex.phpを正常に実行できるでしょうか。 この(ダミー?)関数の意味と、宣言はどうすればよいでしょうか。 今日初めてPHPを触り、何もわからず恐縮です。よろしくお願いします。 状況: 1)WinXPに、PHP phpdevで、Apache/PHP(Version 4.2.3)/MySQLをインストール。 2)Apache、PHP、MySQLはRun状態。 3)以下のソースのindex.phpを C:\phpdev\www\MagPress というフォルダに配置 4)http://localhost/MagPress を実行すると、以下のエラーが出る。 Fatal error: Call to undefined function: get_header() in c:\phpdev\www\magpress\index.php on line 1 index.phpのソース: ------------------------------------ <?php global $theme; get_header(); ?> <div id="main"> <?php $theme->hook('main_before'); ?> <div id="content"> <?php $theme->hook('content_before'); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); /** * The default post formatting from the post.php template file will be used. * If you want to customize the post formatting for your homepage: * * - Create a new file: post-homepage.php * - Copy/Paste the content of post.php to post-homepage.php * - Edit and customize the post-homepage.php file for your needs. * * Learn more about the get_template_part() function: http://codex.wordpress.org/Function_Reference/get_template_part */ get_template_part('post', 'homepage'); endwhile; else : get_template_part('post', 'noresults'); endif; get_template_part('navigation'); ?> <?php $theme->hook('content_after'); ?> </div><!-- #content --> <?php get_sidebars(); ?> <?php $theme->hook('main_after'); ?> </div><!-- #main --> <?php get_footer(); ?>

  • PHPで定義されている関数のコードが見たい

    PHPでコードを記述するとき、関数を定義することがあります。 function test($name){ : : } しかし、最初から定義されている関数がありますよね。 isset()やfile_get_contents()などの関数です。 こういった関数の中身をみたいのですが、PHPのどの部分を見ればいいのでしょうか。 関数の中身とは、たとえばfile_get_contentsなら function file_get_contents($name){ : //この部分のことです。 : } PEARだったら、たとえばDB.phpならばDB,phpの中身を見ればいいのですが、fopen()などの最初から定義されている関数はどこを見れいいのかがわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのODBC関数

    PHPのODBC関数でデータベースに接続したいのですが、 下記のエラーが発生します。PHPのモジュール追加が必要なのでしょうか? またそれはどのようなものでしょうか?よろしくお願いします。 Fatal error: Call to unsupported or undefined function odbc_connect()

  • PHPにおいての関数ポインタ(リファレンス)の実装の仕方

    こんにちわ, 今PHP4.3.4を使用してWebを作成しています。 C言語で言う関数ポインタを実装したいのですが,どうすればいいのでしょうか。 たとえば, function hoge(){ return 5; } function hoge2(){ return 4; } function hoge3(){ return 3; } と宣言して function main($a, $b)[ return ($a + $b); } としたときに, main(hoge(), hoge2()); をしたときに9 main(hoge()2, hoge3()); をしたときに7 とするようにmainの関数をつくりたいのですが,どうすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのクラスについて

    phpで会員制サイトの制作を勉強しています。 データベースへはPDOで接続しています。 MySQLデータベースを使用しています。 現在、クラスを作成してみようとオブジェクト指向について学習しています。 試しに、既に作ってあった、POSTされた文字列をhtmlspecialcharsやfilter_inputするようなセキュリティやNoticeエラー対策に使うプログラム関数を class Checkのメソッドとしてまとめようとしています。 関数にしていたときは正常に動いたのですが、 クラスのメソッドにするとFatal error: Cannot use object of type Check as array in ~というエラーが出てしまいます。 恐らく、引数の受け渡し($_POSTの値の受け渡し)の時点でうまくいっていないのか、 私的には、メソッド結果の受け取りがあまり理解できていないので、 メソッド結果の値を配列で返すのがうまくいっていないのだと思います。 <関数> function postFilter($before) { foreach($before as $key=>$value) { $after[$key] = filter_input(INPUT_POST, $key); } return @$after; } *呼び出し* $post = postFilter($_POST); $email = $post["email "]; <クラス> class Check { public function エスケープ処理 { エスケープ処理のメソッド } //POSTで受け取ったものをfilter_inputでフィルタリング public function filterPost($before){ foreach($before as $key=>$value) { $after[$key] = filter_input(INPUT_POST, $key); } return $after; }    ・    ・    ・ } *呼び出し* $post = new Check(); $post -> filterPost($_POST); $email = $post ["email "]; そもそもクラス化する必要がない気がして、関数のままにしておこうかと思ったのですが、 オブジェクト指向はどのプログラムを学ぶにあたっても、重要だと思い、 わからないまま放置したくないので質問しました。 添削いただけませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • WPでphpファイルにエラーが出る

    attitudeというテーマのphpデータに最新記事のお知らせを表示させたいと思っています そこで下記のデータを加えると、最後の<php? get_footer() ?;>になぜかシンタックスエラーが出てきます <?php global $post; $top_news = get_posts( array( 'category_name' => 'info' , //カテゴリースラッグはinfo 'posts_per_page' => 5, //1ページでの表示件数 ) ); ?> <ul class="postsList"> <?php foreach( $top_news as $post ) : setup_postdata($post); ?> <li><?php the_title(); ?></li> </ul> <?php wp_reset_postdata(); ?> <ul>より下を削除するとエラーが消えます。 何卒、宜しくお願いいたします。 以下はページ全体のコードです。参考にお願いします。 <?php /** * Template Name: Business Template * * Displays the Business Layout of the theme. * * @package Theme Horse * @subpackage Attitude * @since Attitude 1.1 */ ?> <?php get_header(); ?> <?php /** * attitude_before_main_container hook */ do_action( 'attitude_before_main_container' ); ?> <div id="container"> <?php /** * attitude_business_template_content hook * * HOOKED_FUNCTION_NAME PRIORITY * * attitude_display_business_template_content 10 */ do_action( 'attitude_business_template_content' ); ?> </div><!-- #container --> <?php /** * attitude_after_main_container hook */ do_action( 'attitude_after_main_container' ); ?> <?php global $post; $top_news = get_posts( array( 'category_name' => 'info' , //カテゴリースラッグはinfo 'posts_per_page' => 5, //1ページでの表示件数 ) ); ?> <ul class="postsList"> <?php get_footer(); ?> ーーーーーーーーーーーーーー

    • 締切済み
    • PHP
  • PHPのprivate関数について

    PHPのアクセス修飾子privateについてお聞きします。 以下のようなコードを書いて実行したら、エラーメッセージが出ました。 code: <?php class Super { protected function protectedFunc(){ echo "original-Protected\n\r"; } private function privateFunc(){ echo "Private\n\r"; } public function publicFunc(){ privateFunc(); } } $super = new Super; $super->publicFunc(); ?> error message: Fatal error: Uncaught Error: Call to undefined function privateFunc() in C:\xampp\htdocs\HTML_practice\protected-practice.php:12 Stack trace: #0 C:\xampp\htdocs\HTML_practice\protected-practice.php(17): Super->publicFunc() #1 {main} thrown in C:\xampp\htdocs\HTML_practice\protected-practice.php on line 12 line12 というのは、public 関数であるpublicFunc() の内側で、private関数のprivateFunc() を使おうとした部分ですが、private関数はクラス定義の中だから使えるというのは間違った認識でしょうか? だとするとprivate関数はいつどんな時に使えるのでしょうか? どなたか例を挙げて説明頂けないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • php 関数が定義されていない???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 エラーメッセージは Fatal error: Uncaught Error: Call to undefined function getBlog() in C:\xampp\htdocs\detail.php:3 Stack trace: #0 {main} thrown in C:\xampp\htdocs\detail.php on line 3 です。 別のファイルで function getBlog($id) { if(empty($id)) { exit('idが不正です。'); と、getBlogという関数を使っています。 それを利用した、と言っています。 何故、3行目がエラーでしょうか? 度々申し訳ございません。 アドバイスの程、宜しくお願い申し上げます。      記 <?php require_once('dbc.php'); $result = getBlog($_GET['id']); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ詳細</title> </head> <body> <h2>ブログ詳細</h2> <h3>タイトル:<?php echo $result['title'] ?> </h3> <p>投稿日時:<?php echo $result['post_at'] ?></p> <p>カテゴリー:<?php echo setCategoryName($result['category']) ?></p> <hr> <p>本文:<?php echo $result['content'] ?></p> </body> </html>

    • ベストアンサー
    • PHP
  • Javascript 関数内でのPHP関数

    PHPとMySQLを使い、機械部品の管理を行うプログラムを作成中です。 以下に添付しましたようなPHPファイルの中で、Javascriptを使って<input> の中に入力したパーツ番号からOKボタンを押してその詳細説明(英文)を description: の横の<span> に取得しようとしています。 実行結果を見ると、PHP関数 getDescription( ) そのものは機能しているようですが、Javascript 関数 GetDesc( ) の中で使うと機能しません。 色々試してみましたが上手く行きませんでした。 PHPソースコードと実行した画面のスクリーンショットを添付してありますが、何をどうすれば思った通りにできるのか、どなたかお知恵を貸していただけないでしょうか。よろしくお願いいたします。 ちなみに、databaseConnection.php はデータベースに接続するだけのもので、そこでの接続リソース変数 $connection をglobal 変数として以下のファイルで使っています。 添付ファイル <! DOCTYPE HTML> <html> <head> <?php require_once "databaseConnection.php"; global $connection; function getDescription($pn){ global $connection; $query = "SELECT * FROM partsmaster WHERE partNumber='".$pn."'"; $result = mysqli_query($connection, $query) or die("cannot get query in search()"); $row = mysqli_fetch_assoc($result); return $row["description"]; } ?> <script> function getDesc(){ var PN = document.getElementById("PN").value; PN = "'"+ PN +"'"; document.getElementById("DSC").innerHTML = "<?php $pn = '" + PN + "'; echo getDescription($pn); ?>"; } </script> </head> <body> input part number:<input type="text" id="PN"> <button onclick="getDesc()">OK</button></br></br> description:<span id="DSC"></span></br> <?php $pn = "591-011-10"; echo "=============================</br>"; echo getDescription($pn); ?> </body> </html>

    • ベストアンサー
    • PHP
  • こんにちは、PHP初心者です。

    こんにちは、PHP初心者です。 Smartyを利用してWebサイトを構築中です。 Smarty.classの派生クラスを作成し、コンストラクタ内でDB接続オブジェクトを privateプロパティ($_db)に設定しているのですが$_dbの値が アクセサメソッドを通じてgetすると空白になってしまいます。 色々やってみましたが理由が分からず、 ためしにコンストラクタ内でクエリを実行したところテーブルから値を取得できました。 なぜコンストラクタ外に出るとprivateプロパティの値が取得できなくなるのか分かりません。 どなたかご教示ください。 どうぞよろしくお願いします。 下記ソースです。 *(Smarty.classの派生クラス)********************************************** <?php require_once("DB.php"); require_once("Smarty.class.php"); class MySmarty extends Smarty{ private $_db; public function __construct(){ parent::__construct(); $this->template_dir="C:/xampp/modules/access_control/templates"; $this->compile_dir="C:/xampp/modules/access_control/templates_c"; $this->config_dir="C:/xampp/config"; $this->config_load("access_control.conf",basename($_SERVER['SCRIPT_NAME'],".php")); $tihs->_db=DB::connect($this->get_config_vars('db_string')); if (PEAR::isError($db)) { die($db->getMessage()); } } public function __destruct(){ $this->_db->disconnect(); } public function get_db(){return $tihs->_db;} } ?> *********************************************** *(メインのPHP)********************************************** <?php require_once("../../modules/access_control/class/MySmarty.class.php"); require_once("../../modules/access_control/class/name_search.class.php"); $o_smarty=new MySmarty(); $db=$o_smarty->get_db(); ←ここで値が取得できない $o_smarty->assign("toolname",name_search::getToolName($db)); $o_smarty->display(basename($_SERVER['SCRIPT_NAME'],".php").".tpl"); ?> ***********************************************

    • ベストアンサー
    • PHP

専門家に質問してみよう