অদ্ভুত পিএইচপি ত্রুটি: 'লেখার প্রসঙ্গে ফাংশন রিটার্ন মান ব্যবহার করতে পারি না'


178

আমি এই ত্রুটিটি পাচ্ছি এবং আমি এর মাথা বা লেজ তৈরি করতে পারি না।

সঠিক ত্রুটি বার্তাটি হ'ল:

মারাত্মক ত্রুটি: 48h নং লাইনে / home/curricle/public_html/descarga/index.php এ লেখার প্রসঙ্গে ফাংশন রিটার্ন মান ব্যবহার করতে পারবেন না

48 লাইনটি হ'ল:

if (isset($_POST('sms_code') == TRUE ) {

এখানে কি হচ্ছে করা যেতে পারে?

এখানে সম্পূর্ণ ফাংশন:

function validate_sms_code() {

    $state = NOTHING_SUBMITED;

    if (isset($_POST('sms_code') == TRUE ) {
        $sms_code = clean_up($_POST('sms_code'));
        $return_code = get_sepomo_code($sms_code);

        switch($return_code) {

          case 1:
            //no error
            $state = CORRECT_CODE;
            break;

          case 2:
            // code already used
            $state = CODE_ALREADY_USED;
            break;

          case 3:
            // wrong code
            $state = WRONG_CODE;
            break;

          case 4:
            // generic error
            $state = UNKNOWN_SEPOMO_CODE;
            break;

          default:
            // unknown error
            $state = UNKNOWN_SEPOMO_CODE;
            throw new Exception('Unknown sepomo code: ' . $return_code);
            break;
        }

    } else {
        $state = NOTHING_SUBMITED;
    }
    dispatch_on_state($state);
}

22
By _POST ('sms_code') by _POST ['sms_code'] হওয়া উচিত।
ডেভিডটবার্নাল

এছাড়াও, যদি বিবৃতিটির প্রয়োজন হয় না তবে অন্য বিবৃতিটির বিবরণ প্রয়োজন। $stateপরিবর্তিত হবে না, NOTHING_SUBMITEDএটি ইতিমধ্যে যদি মানটি হয় তবে এটি পুনরায় সেট করার দরকার নেই ।
গ্লেন ডেটন

ভবিষ্যতের লোকেরা, কেউ কি বার্তাটির প্রকৃত অর্থ ব্যাখ্যা করতে পারে?
ওগাজা

উত্তর:


111

তুমি বলতে চাচ্ছ

if (isset($_POST['sms_code']) == TRUE ) {

যদিও ঘটনাচক্রে আপনি সত্যিই বলতে চাইছেন

if (isset($_POST['sms_code'])) {

3
... বা if (isset($_POST['sms_code']) === TRUE ) {:-)
কীবোর্ডসমশার

আমি যে সমস্যার মুখোমুখি ছিলাম তার সমাধানও পেয়েছি, সুতরাং এফওয়াইআই - এটি $ _REQQUEST (পৃষ্ঠার URL- এর পরামিতি) এর ক্ষেত্রেও যায়।
TheCuBeMan

5
আমি বুঝতে পেরেছি যে আমি এ থেকে দেরি করে ফেলেছি, তবে এটি পিএইচপি সংস্করণ নির্ভরও তাই না? আমি নিশ্চিত যে এটি পিএইচপি সংস্করণগুলিতে 5.6 এর মতো বৈধ, তবে আমি মনে করি এটি 5.3-এ নেই
আনসেটল্টিং ট্রেন্ড

490

ফাংশন রিটার্নে খালি ব্যবহার করার সময়ও এটি ঘটে:

!empty(trim($someText)) and doSomething()

কারণ খালি কোনও ফাংশন নয় তবে একটি ভাষা নির্মাণ (নিশ্চিত নয়), এবং এটি কেবল ভেরিয়েবলগুলি গ্রহণ করে:

রাইট:

empty($someVar)

ভুল:

empty(someFunc())

পিএইচপি 5.5 থেকে, এটি ভেরিয়েবলের চেয়ে বেশি সমর্থন করে। 5.5 এর আগে আপনার যদি এটির প্রয়োজন হয় তবে ব্যবহার করুন trim($name) == falseখালি ডকুমেন্টেশন থেকে ।


ডাং, আমি ঠিক এই ত্রুটিটি পেয়েছি, আপনার সঠিক উদাহরণটি (খালি ভিতরে ট্রিম) করুন। ধন্যবাদ এক্স 3। কী অদ্ভুত ত্রুটি .. আমি এখনও পুরোপুরি বুঝতে পারি না: / খালি () স্ট্রিং নিতে পারে .. এবং ছাঁটা () স্ট্রিং দেয় .. তাই wth?
নিক রোল্যান্ডো

15
@ শ্র্রেডার - কারণ empty()এটি আসলে কোনও কার্য নয়; এটি একটি ভাষা নির্মাণ, মত echo। পিএইচপি পার্সার ভাষা রচনাগুলি আলাদাভাবে পরিচালনা করে। এর ক্ষেত্রে emptyএটি প্যারামিটারটি ভ্যারিয়েবল হিসাবে দেখায়, মূল্যায়নের মতো কিছু নয়, তাই আপনি যদি কোনও ফাংশন পাস করার চেষ্টা করেন তবে এটি ভেঙে যায়। কমপক্ষে এটি আমার বোঝার। এখানে এবং এখানে আরও তথ্য ।
অনুদান দিন

1
এটি হ'ল ঠিক ত্রুটিটিও into কেন এটি শীর্ষ উত্তর নয়?
আদম এফ

2
আমার সহকর্মী যখন আমি ছিলাম তখন এই ত্রুটিটি পেয়েছিল। বিভ্রান্তি তৈরি হয়েছিল, যতক্ষণ না আমি ডক্স পরীক্ষা করেছি - পিএইচপি 5.5 হিসাবে, খালি () কোনও ফাংশন এবং ভেরিয়েবল থেকে রিটার্ন গ্রহণ করবে। us3.php.net/empty
জেমস

1
5.5 এর জন্য হররে! আপনি আপগ্রেড না হওয়া পর্যন্ত আপনি নিজের মূল function mTEE($val){ return empty($val); }
ফাংশনটিতে

22
if (isset($_POST('sms_code') == TRUE ) {

এই লাইনটি পরিবর্তন করুন

if (isset($_POST['sms_code']) == TRUE ) {

আপনি এর জন্য বন্ধনী () ব্যবহার করছেন $_POSTতবে আপনি বর্গাকার বন্ধনী চেয়েছিলেন []

:)

অথবা

if (isset($_POST['sms_code']) && $_POST['sms_code']) { 
//this lets in this block only if $_POST['sms_code'] has some value 

1
না, আপনি "if (isset ($ _ POST ['sms_code'] == সত্য)) {" লিখতে পারবেন না, "অনুপস্থিত") "।
মিডাস

1
'আপনি প্রথম বন্ধনী ব্যবহার করছেন ... তবে আপনি বর্গাকার বন্ধনী চেয়েছিলেন' এই বাক্যটির জন্য কয়েক বিলিয়ন শীতল পয়েন্ট ছিল, যা আমার সমস্যাটি ছিল (যা আমাকে এই প্রশ্নের দিকে পরিচালিত করেছিল) ছিল
কেভিন হর্ন

1
ভাই, থেক্স ম্যান! এখন, যদি পার্সারটি বলে যে "আমি অ্যারে ভেরিয়েবলের নাম, দুহ!" পরে স্কোয়ার ব্র্যাকেটগুলি প্রত্যাশা করছিলাম তবে এটি "লেখার প্রসঙ্গে ফাংশন রিটার্ন মান ব্যবহার করতে পারবেন না" এর চেয়ে অনেক বেশি শীতল লাগবে। আমি পিএইচপি বলছি এটি পরামর্শ হিসাবে জমা দিতে পারে।
জো ভলকার

13

ওয়ার্ডপ্রেসের জন্য :

পরিবর্তে:

if (empty(get_option('smth')))

হতে হবে:

if (!get_option('smth'))

11

সঠিক বাক্য গঠন (আপনার শেষে একটি অনুপস্থিত বন্ধনী ছিল):

if (isset($_POST['sms_code']) == TRUE ) {
                            ^

পিএস আপনার কোন == TRUE অংশের দরকার নেই , কারণ ইতিমধ্যে বুলিয়ান (সত্য / মিথ্যা) ফিরে এসেছে।


4

এটি একাধিক দৃশ্যে ঘটতে পারে, নীচে সুপরিচিত দৃশ্যের একটি তালিকা রয়েছে:

// calling empty on a function 
empty(myFunction($myVariable)); // the return value of myFunction should be saved into a variable
// then you can use empty on your variable

// অ্যারেতে কোনও উপাদান অ্যাক্সেস করার জন্য প্রথম বন্ধনী ব্যবহার করে, কোনও ফাংশন কল করার জন্য প্রথম বন্ধনী ব্যবহার করা হয়

if (isset($_POST('sms_code') == TRUE ) { ...
// that should be if(isset($_POST['sms_code']) == TRUE)

যখন আমরা নীচের মতো কোনও ফাংশনের ফলাফল বাড়ানোর চেষ্টা করি তখন এটিও ট্রিগার হতে পারে:

$myCounter = '356';

$myCounter = intVal($myCounter)++; // we try to increment the result of the intVal...
// like the first case, the ++ needs to be called on a variable, a variable should hold the the return of the function then we can call ++ operator on it.

আপনি কি বাগ পেতে চান? কারণ আপনি কীভাবে বাগ পাবেন। না তবে গুরুত্ব সহকারে, কখনও এটি করবেন না। এটি করার মতো if(i++), এটি কাউন্টার বাড়ানো এবং তার মান মূল্যায়ন করার চেয়ে কম দেখায়, তবে এটি যদি কখনও ব্যাক আউট করে তবে এটি আপনার মাথাব্যথার কারণ হতে পারে। সম্পাদনা: আমি এটিকে ইঙ্গিত দিচ্ছি না যে আপনি এটি করছেন, কেবল এটি উত্তরটি পড়া নতুন প্রোগ্রামারদের দিকে ইঙ্গিত করে এবং এটি একটি ঝরঝরে জিনিস বলে মনে করা হচ্ছে যা বৃদ্ধি করা হচ্ছে তা গণনা বা মূল্যায়নের সময় বর্ধিত মানগুলিতে।
ভিক্টর ডি

@VictorD। আমি কেবল বলছি যে ত্রুটি সেই পরিস্থিতিতে ঘটতে পারে তার অর্থ এটি করা ভাল নয়।
মেহেদী কারামোসলি 23

আমি কি আরও একটি পরামর্শ দিতে পারি? আপনি যদি একটি বিবৃতি =পরিবর্তে না ==
জোশিয়ার

আমার জন্য এটি পিএইচপি সংস্করণ ছিল, 7.0 :) এ আপগ্রেড করুন
শিরোনাম

3

সমস্যাটি আপনাকেই ()যেতে হবে[]

if (isset($_POST('sms_code') == TRUE)

দ্বারা

if (isset($_POST['sms_code'] == TRUE)

3

আমারও তোর মতো একই সমস্যা ছিল। সমস্যাটি হ'ল আপনি একটি পুরানো পিএইচপি সংস্করণ ব্যবহার করছেন। আমি পিএইচপি 5.6 এ আপগ্রেড করেছি এবং সমস্যাটির আর অস্তিত্ব নেই।


1

অন্য একটি পরিস্থিতি যেখানে এই ত্রুটিটি কারণে সিনট্যাক্স ত্রুটির কারণে ট্রিগার হয়েছে:

ucwords($variable) = $string;

1
কারণ ucwordsএকটি স্ট্রিং রিটার্ন করুন এবং কল করার প্রসঙ্গটি ভুল, আপনি যদি উদাহরণস্বরূপ চেষ্টা করে থাকেন $Test = ''; ${ucwords('test')} = 'String new !'; echo $Test;, তবে আপনাকে নির্ধারিত নতুন মানটি দেখান।
কিপ করুন

0

সিনট্যাক্স ত্রুটির কারণে আমিও এই সমস্যায় পড়েছিলাম। অ্যারে সূচকগুলিতে "[" এর পরিবর্তে "(" ব্যবহার করে:

   foreach($arr_parameters as $arr_key=>$arr_value) {
        $arr_named_parameters(":$arr_key") = $arr_value;
    }

0

এই ত্রুটিটি বেশ সঠিক এবং প্রাসঙ্গিক বাক্য গঠন ইস্যুটি হাইলাইট করে। যে কোনও ধরণের "নন-অ্যাসাইনেবল" সিনট্যাক্স সম্পাদন করে পুনরুত্পাদন করা যেতে পারে। এই ক্ষেত্রে:

ফাংশন সিনট্যাক্স ($ হ্যালো) {.... তারপরে ফাংশনটিকে একটি সম্পত্তি হিসাবে কল করে একটি মান নির্ধারণ করার চেষ্টা করুন .... $ this-> সিনট্যাক্স ('হ্যালো') = 'ওয়ার্ল্ড';

উপরের ত্রুটিটি ছুঁড়ে দেওয়া হবে কারণ বাক্য বাক্যটি ভুল রয়েছে। 'ওয়ার্ল্ড'-এর সঠিক অ্যাসাইনমেন্টটি আপনি ব্যবহার করেছেন এমন প্রসঙ্গে লেখা যায় না (অর্থাত্ এই প্রেক্ষাপটের জন্য সিন্টেক্সটিক্যালি ভুল)। 'ফাংশন রিটার্ন মান ব্যবহার করতে পারে না' বা এটি 'ডান-হাতের মানটি ফাংশনটিতে বরাদ্দ করতে পারে না কারণ এটি কেবল পঠনযোগ্য'

ওপিএস কোডে সুনির্দিষ্ট ত্রুটিটি বর্গাকার বন্ধনীগুলির পরিবর্তে বন্ধনী ব্যবহার করে হাইলাইট করা।


-1

ভুল অপারেটরের কারণে হতে পারে, =, যখন এটি হওয়া উচিত ==

if(mysql_num_rows($result) = 1)
    return $result;
else
    return false;

এই কোডটি এই ত্রুটি ছুড়ে ফেলে

নোট করুন = অ্যাসাইনমেন্ট অপারেটর এবং তুলনা অপারেটর নয়। = === = পরিবর্তন করতে হবে Fix

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