একটি ক্লাস পদ্ধতিতে একটি ফাংশন কল?


108

আমি কীভাবে এটি করা যায় তা বের করার চেষ্টা করেছি তবে কীভাবে হয় তা সম্পর্কে আমি নিশ্চিত নই।

আমি যা করার চেষ্টা করছি তার উদাহরণ এখানে:

class test {
     public newTest(){
          function bigTest(){
               //Big Test Here
          }
          function smallTest(){
               //Small Test Here
          }
     }
     public scoreTest(){
          //Scoring code here;
     }
}

আমার যে অংশটি নিয়ে সমস্যা হচ্ছে তা এখানে রয়েছে, আমি কীভাবে বিগ টেস্টকে কল করব ()?


2
কেবল তা নিশ্চিত করার জন্য: একটি ফাংশন এবং একটি পদ্ধতি হ'ল একই ফাংশন === পদ্ধতি। ক্লাসের কার্যকারিতা বর্ণনা করার জন্য শব্দ পদ্ধতিটি প্রায়শই ওও ভাষায় ব্যবহৃত হয়।
মার্কাস

কিছু শর্তাবলী হারিয়ে যাওয়ার কারণ হ'ল আমি অফিস থেকে বের হয়ে যাচ্ছিলাম, তাই সময় মতো আমার সংক্ষিপ্ত ছিল।
WAC0020

উত্তর:


201

আর একবার চেষ্টা কর:

class test {
     public function newTest(){
          $this->bigTest();
          $this->smallTest();
     }

     private function bigTest(){
          //Big Test Here
     }

     private function smallTest(){
          //Small Test Here
     }

     public function scoreTest(){
          //Scoring code here;
     }
}

$testObject = new test();

$testObject->newTest();

$testObject->scoreTest();

1
function()ক্লাস ফাংশনের ভিতরে অন্য একটি। Php পৃষ্ঠা থেকে চালানো এবং ক্লাস ফাংশনের অভ্যন্তরে ফলাফল দখল করা কি সম্ভব? উদাহরণস্বরূপ আমার কাছে একটি কোয়েরি রয়েছে যা একটি টেবিল থেকে সমস্ত নির্বাচন করে এবং তারপরে সমস্ত ফলাফল সেট আনতে পারে। ক্লাস ফাংশনের ভিতরে ফলাফল নির্ধারণের মাধ্যমে লুপ করা কি সম্ভব? যেমনclass query{ public function show(){ getResults(); while($stmt->fetchCollumn()){ ECHO RESULTS HERE }
জেমস 111

22

আপনার সরবরাহিত নমুনাটি বৈধ পিএইচপি নয় এবং কয়েকটি সমস্যা রয়েছে:

public scoreTest() {
    ...
}

কোনও সঠিক ফাংশন ঘোষণা নয় - আপনাকে 'ফাংশন' কীওয়ার্ড সহ ফাংশনগুলি ডিক্লেয়ার করতে হবে।

বাক্য গঠনটি বরং হওয়া উচিত:

public function scoreTest() {
    ...
}

দ্বিতীয়ত, পাবলিক ফাংশন () {in এ বিগ টেস্ট () এবং স্মার্ট টেস্ট () ফাংশন মোড়ানো এগুলি ব্যক্তিগত করে না - আপনার উভয়কে ব্যক্তিগতভাবে ব্যক্তিগত কীওয়ার্ডটি পৃথকভাবে ব্যবহার করা উচিত:

class test () {
    public function newTest(){
        $this->bigTest();
        $this->smallTest();
    }

    private function bigTest(){
        //Big Test Here
    }

    private function smallTest(){
           //Small Test Here
    }

    public function scoreTest(){
      //Scoring code here;
    }
}

এছাড়াও, শ্রেণি ঘোষণায় ('পরীক্ষা') শ্রেণীর নামকে মূলধন করার জন্য এটি কনভেনশন।

আশা করি এইটি কাজ করবে.


11
class test {
    public newTest(){
        $this->bigTest();
        $this->smallTest();
    }

    private  function bigTest(){
        //Big Test Here
    }

    private function smallTest(){
       //Small Test Here
    }

    public scoreTest(){
      //Scoring code here;
    }
 }

10

আমি মনে করি আপনি এর মতো কিছু সন্ধান করছেন।

class test {

    private $str = NULL;

    public function newTest(){

        $this->str .= 'function "newTest" called, ';
        return $this;
    }
    public function bigTest(){

        return $this->str . ' function "bigTest" called,';
    }
    public function smallTest(){

        return $this->str . ' function "smallTest" called,';
    }
    public function scoreTest(){

        return $this->str . ' function "scoreTest" called,';
    }
}

$test = new test;

echo $test->newTest()->bigTest();


3

"একটি ফাংশনের মধ্যে কোনও ফাংশন" থাকার জন্য, আপনি যদি জিজ্ঞাসা করছেন তা যদি আমি বুঝতে পারি তবে আপনার পিএইচপি 5.3 প্রয়োজন, যেখানে আপনি নতুন বন্ধকরণ বৈশিষ্ট্যটি নিতে পারেন।

সুতরাং আপনি থাকতে পারে:

public function newTest() {
   $bigTest = function() {
        //Big Test Here
   }
}

3

শ্রেণি থেকে ইনস্ট্যান্ট করা কোনও অবজেক্টের যে কোনও পদ্ধতির কল করতে (নতুন স্টেটমেন্ট সহ) আপনার এটিকে "পয়েন্ট" করতে হবে। বাইরে থেকে আপনি কেবলমাত্র নতুন বিবৃতি দ্বারা নির্মিত সংস্থান ব্যবহার করবেন। নতুন দ্বারা নির্মিত যেকোন অবজেক্টের ভিতরে পিএইচপি, একই সংস্থানটি এই ভেরিয়েবলের মধ্যে সংরক্ষণ করে। সুতরাং, একটি শ্রেণীর ভিতরে আপনি method এটি দ্বারা পদ্ধতিটি নির্দেশ করতে হবে। আপনার ক্লাসে, ক্লাসের smallTestঅভ্যন্তর থেকে ফোন করতে, আপনাকে অবশ্যই পিএইচপিকে বলতে হবে যে আপনি যে নতুন বিবৃতিটি কার্যকর করতে চান তার দ্বারা তৈরি সমস্ত অবজেক্টের মধ্যে কেবল লিখুন:

$this->smallTest();

মারাত্মক ত্রুটি: বস্তু প্রসঙ্গে না থাকাকালীন। এটি ব্যবহার করা
স্টেনফোর্ডলি

2

উদাহরণ 1

class TestClass{
public function __call($name,$arg){
call_user_func($name,$arg);
}
}
class test {
     public function newTest(){

          function bigTest(){
               echo 'Big Test Here';
          }
          function smallTest(){
               echo 'Small Test Here';
          }

$obj=new TestClass;

return $obj;
     }

}
$rentry=new test;
$rentry->newTest()->bigTest();

example2

class test {
     public function newTest($method_name){

          function bigTest(){
               echo 'Big Test Here';
          }
          function smallTest(){
               echo 'Small Test Here';
          }

      if(function_exists( $method_name)){    
call_user_func($method_name);
      }
      else{
          echo 'method not exists';
      }
     }

}
$obj=new test;
$obj->newTest('bigTest')

$ rentry-> newTest () -> bigTest (); $ rentry-> newTest () -> smallTest (); ---- মারাত্মক ত্রুটি: বড় টেস্ট () পূর্বে ঘোষিত করা যাবে না
ttont

2

আপনি যদি বর্তমান ক্লাসের স্ট্যাটিক ভেরিয়েবল বা ফাংশনটি কল করতে চান তবে আপনি তার self::CONSTপরিবর্তেও ব্যবহার $this->CONSTকরতে পারেন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.