পিএইচপি পার্স / সিনট্যাক্স ত্রুটি; এবং কীভাবে তাদের সমাধান করবেন


652

প্রত্যেকে সিনট্যাক্স ত্রুটিতে চলে। এমনকি অভিজ্ঞ প্রোগ্রামাররা টাইপগুলি তৈরি করে। নতুনদের জন্য, এটি শেখার প্রক্রিয়ার একটি অংশ মাত্র। তবে ত্রুটি বার্তাগুলির ব্যাখ্যা করা প্রায়শই সহজ:

পিএইচপি পার্স ত্রুটি: সিনট্যাক্স ত্রুটি, লাইন 20-এ সূচি ph p এ অপ্রত্যাশিত {

অপ্রত্যাশিত প্রতীক সবসময় আসল অপরাধী হয় না। তবে লাইন নম্বরটি কোথায় সন্ধান শুরু করবে সে সম্পর্কে মোটামুটি ধারণা দেয়।

সর্বদা কোড প্রসঙ্গে দেখুন । সিনট্যাক্স ভুল প্রায়ই উল্লিখিত লুকায় বা মধ্যে পূর্ববর্তী কোড লাইন । ম্যানুয়াল থেকে সিনট্যাক্স উদাহরণগুলির সাথে আপনার কোডের তুলনা করুন।

যদিও প্রতিটি ক্ষেত্রেই অন্যটির সাথে মেলে না। তবুও সিনট্যাক্স ভুলগুলি সমাধান করার জন্য কিছু সাধারণ পদক্ষেপ রয়েছে । এই উল্লেখগুলি সাধারণ সমস্যাগুলির সংক্ষিপ্তসার করেছে:

নিবিড়ভাবে সম্পর্কিত উল্লেখ:

এবং:

স্ট্যাক ওভারফ্লো এছাড়াও রুকি কোডারদের স্বাগত জানায়, এটি বেশিরভাগ পেশাদার প্রোগ্রামিং প্রশ্নগুলিতে লক্ষ্যযুক্ত।

  • প্রত্যেকের কোডিং ভুল এবং সংকীর্ণ টাইপগুলির উত্তর দেওয়া বেশিরভাগ ক্ষেত্রে অফ-বিষয় হিসাবে বিবেচিত হয়।
  • সুতরাং দয়া করে সিনট্যাক্স ফিক্সিংয়ের অনুরোধগুলি পোস্ট করার আগে, প্রাথমিক পদক্ষেপগুলি অনুসরণ করার জন্য সময় নিন ।
  • আপনার যদি এখনও করতে হয় তবে দয়া করে আপনার নিজের সমাধানের উদ্যোগ, চেষ্টা করা সংশোধন এবং কী মনে হচ্ছে বা ভুল হতে পারে সে সম্পর্কে আপনার চিন্তার প্রক্রিয়াটি দেখান।

যদি আপনার ব্রাউজারটি "সিন্ট্যাক্সেরর: অবৈধ চরিত্র" এর মতো ত্রুটি বার্তা প্রদর্শন করে তবে তা আসলে তা নয়সম্পর্কিত, কিন্তু একটি - সিনট্যাক্স ত্রুটি


বিক্রেতার কোডে সিনট্যাক্স ত্রুটি উত্থাপিত: অবশেষে, বিবেচনা করুন যে যদি আপনার কোডবেস সম্পাদনা করে সিনট্যাক্স ত্রুটিটি উত্থাপিত না হয় তবে কোনও বাহ্যিক বিক্রেতা প্যাকেজ ইনস্টল বা আপগ্রেড করার পরে এটি পিএইচপি সংস্করণের অসঙ্গতিজনিত কারণে হতে পারে, সুতরাং আপনার প্ল্যাটফর্মের বিরুদ্ধে বিক্রেতার প্রয়োজনীয়তাগুলি পরীক্ষা করুন সেটআপ।


1
এটি উত্তর হিসাবে যথেষ্ট ডেটা নয়, তবে কেউ পার্সেকিট_কম্পাইল_ স্ট্রিং সহ বিশ্লেষক লিখতে এবং এটিতে আরও বন্ধুত্বপূর্ণ উত্তর রাখতে পারে। যদি আপনার আইডিইতে একীভূত হয় তবে এটি বেশ তথ্যমূলক হতে পারে।
ওভেন বেরেসফোর্ড

4
আপনি এটিতে একটি চিত্তাকর্ষক পরিমাণ কাজ রেখেছেন। তার জন্য শ্রদ্ধা। শিক্ষকদের পক্ষে ত্রুটিগুলি দ্রুত নির্দেশ করতে শেখানো বা আইডিই তৈরি করা বা দ্রুত সমাধানগুলি বাস্তবায়ন করা সম্ভবত খুব ভাল। যাইহোক, @ পানিকের পরামর্শ অনুসারে আইডিইগুলি ইতিমধ্যে কার্যকরভাবে আপনার বেশিরভাগ কাজটি করবে। অতিরিক্তভাবে, আমি অনেক ক্ষেত্রেই আবার স্ক্র্যাচ থেকে শুরু করা একটি ভাল বিকল্প।
allprog

1
@ ফ্রেড-আইআই- আমি মনে করি বেশিরভাগ কারণগুলি T_IF / T_FOREACH / ...ব্লকের সাথে সমান । তবুও আমি আইএফ / ইএলএসই / ইএলএসআইএফ প্রশ্নের জন্য আরও কাস্টম সংক্ষিপ্তসার তৈরি করতে চেয়েছিলাম।
মারিও

1
@ মারিও কীভাবে এই শব্দটি বাক্যবস্তু করতে হয় তা জানেন না, তবে এই প্রশ্নোত্তরটি সম্ভবত কিছুটা আবার রচনা ও আরও কাঠামোগত হওয়া উচিত? (
সাময়িক

2
আপনি জানেন, আমি আশা করি আমি যখন এই বছর আগে পিএইচপি শিখছিলাম তখন আমার এই তালিকাটি ছিল। বিশেষভাবে নতুনদের জন্য খুব সহায়ক।
চিপস্টার

উত্তর:


291

সিনট্যাক্স ত্রুটিগুলি কী কী?

পিএইচপি সি-স্টাইল এবং অত্যাবশ্যক প্রোগ্রামিং ভাষার অন্তর্গত । এর কঠোর ব্যাকরণের নিয়ম রয়েছে, যা ভুল জায়গায় প্রতীক বা শনাক্তকারীদের মুখোমুখি হওয়ার পরে তা পুনরুদ্ধার করতে পারে না। এটি আপনার কোডিং উদ্দেশ্যগুলি অনুমান করতে পারে না।

ফাংশন সংজ্ঞা সিনট্যাক্স বিমূর্ত

সর্বাধিক গুরুত্বপূর্ণ টিপস

কয়েকটি বুনিয়াদি সতর্কতা যা আপনি সর্বদা নিতে পারেন:

  • যথাযথ কোড ইনডেন্টেশন ব্যবহার করুন বা কোনও উচ্চতর কোডিং শৈলী অবলম্বন করুন। পঠনযোগ্যতা অনিয়মকে রোধ করে।

  • সিনট্যাক্স হাইলাইটিং সহ পিএইচপি এর জন্য একটি আইডিই বা সম্পাদক ব্যবহার করুন । যা বন্ধনী / বন্ধনী ব্যালেন্সিংয়ে সহায়তা করে।

    প্রত্যাশিত: সেমিকোলন

  • ম্যানুয়ালটিতে ভাষার রেফারেন্স এবং উদাহরণগুলি পড়ুন । দু'বার, কিছুটা দক্ষ হয়ে উঠুন।

পার্সার ত্রুটিগুলি কীভাবে ব্যাখ্যা করবেন

একটি সাধারণ সিনট্যাক্স ত্রুটি বার্তাটি পড়ে:

ব্যকরণগত ত্রুটি: বাক্যগঠন ত্রুটি, অপ্রত্যাশিত T_STRING , আশা ' ;'file.php উপর লাইন 217

যা একটি সিনট্যাক্স ভুলের সম্ভাব্য অবস্থানের তালিকা করে । উল্লিখিত ফাইলের নাম এবং লাইন নম্বর দেখুন

কোনও মনিকার যেমন T_STRINGপার্সার / টোকেনাইজার কোন চিহ্নটি শেষ পর্যন্ত প্রক্রিয়া করতে পারেন না তা ব্যাখ্যা করে। এটি অবশ্য বাক্যবিন্যাসের ভুলের কারণ নয়।

পূর্ববর্তী কোড লাইনগুলিও লক্ষ্য করা গুরুত্বপূর্ণ । প্রায়শই সিনট্যাক্স ত্রুটিগুলি কেবল দুর্ঘটনা ঘটে যা আগে ঘটেছিল। ত্রুটি রেখার সংখ্যাটি ঠিক যেখানে পার্সার এই সমস্ত প্রক্রিয়াটি শেষ পর্যন্ত ছেড়ে দিয়েছে।

সিনট্যাক্স ত্রুটিগুলি সমাধান করা

সংশ্লেষ হিচাপগুলি সংকুচিত করতে এবং ঠিক করতে অনেকগুলি পন্থা রয়েছে।

  • উল্লিখিত উত্স ফাইলটি খুলুন। উল্লিখিত কোড লাইনটি দেখুন

    • পলাতক স্ট্রিং এবং অপরিবর্তিত অপারেটরগুলির জন্য, এটি সাধারণত আপনি যেখানে অপরাধীকে খুঁজে পান।

    • বাম থেকে ডান লাইনটি পড়ুন এবং প্রতিটি প্রতীক কী করে তা কল্পনা করুন।

  • আরও নিয়মিত আপনাকে পূর্ববর্তী লাইনের দিকেও নজর দেওয়া দরকার ।

    • বিশেষত, অনুপস্থিত ;সেমিকোলনগুলি পূর্ববর্তী লাইনের শেষ / বিবৃতিতে অনুপস্থিত। (অন্তত স্টাইলিস্টিক দৃষ্টিকোণ থেকে।)

    • যদি {কোড ব্লকগুলি }ভুলভাবে বন্ধ বা নেস্টেড হয় তবে আপনার উত্স কোডটি আরও তদন্তের প্রয়োজন হতে পারে। এটি সহজ করতে উপযুক্ত কোড ইন্ডেন্টেশন ব্যবহার করুন ।

  • বাক্য বিন্যাস দেখুন !

    • স্ট্রিং এবং ভেরিয়েবল এবং ধ্রুবকগুলির প্রত্যেকের আলাদা আলাদা রঙ হওয়া উচিত।

    • অপারেটরগুলি +-*/.পাশাপাশি স্বতন্ত্র বর্ণযুক্ত হওয়া উচিত। অন্যথায় তারা ভুল প্রসঙ্গে থাকতে পারে।

    • আপনি যদি স্ট্রিংয়ের বর্ণনাকে খুব বেশি বা খুব ছোট করে প্রসারিত দেখতে পান তবে আপনি একটি অনির্বাচিত বা অনুপস্থিত ক্লোজিং "বা 'স্ট্রিং মার্কার খুঁজে পেয়েছেন।

    • একে অপরের পাশে দুটি একই রঙের বিরামচিহ্ন অক্ষর থাকাও সমস্যা বোঝাতে পারে। সাধারণত, অপারেটর নির্জন যদি এটা না ++, --অথবা প্রথম বন্ধনী একটি অপারেটর নিম্নলিখিত। একে অপরের সরাসরি অনুসরণকারী দুটি স্ট্রিং / শনাক্তকারী বেশিরভাগ প্রসঙ্গে ভুল।

  • হোয়াইটস্পেস আপনার বন্ধু । যে কোনও কোডিং শৈলী অনুসরণ করুন ।

  • অস্থায়ীভাবে দীর্ঘ লাইনগুলি ব্রেক করুন।

    • অপারেটর বা ধ্রুবক এবং স্ট্রিংগুলির মধ্যে আপনি অবাধে নতুন লাইন যুক্ত করতে পারেন । পার্সার ত্রুটি পার্স করার জন্য লাইন নম্বরটি সংক্ষিপ্ত করে তুলবে। খুব দীর্ঘ কোডটি দেখার পরিবর্তে, আপনি অনুপস্থিত বা ভুল জায়গায় বাক্য গঠন চিহ্নকে আলাদা করতে পারেন।

    • জটিল ifবিবৃতিগুলিকে স্বতন্ত্র বা নেস্টেড ifঅবস্থায় বিভক্ত করুন ।

    • দীর্ঘ গণিত সূত্র বা লজিক চেইনের পরিবর্তে কোডটি সহজ করার জন্য অস্থায়ী পরিবর্তনগুলি ব্যবহার করুন। (আরও পঠনযোগ্য = কম ত্রুটি))

    • এর মধ্যে নতুন লাইন যুক্ত করুন:

      1. আপনি কোডটি সহজেই সঠিক হিসাবে চিহ্নিত করতে পারেন,
      2. যে অংশগুলি সম্পর্কে আপনি অনিশ্চিত,
      3. এবং পার্সার যে লাইনগুলি সম্পর্কে অভিযোগ করে

      দীর্ঘ কোড ব্লকগুলি ভাগ করে নেওয়া সিনট্যাক্স ত্রুটির উত্সটি সনাক্ত করতে সত্যই সহায়তা করে।

  • আপত্তিজনক কোড মন্তব্য করুন

    • যদি আপনি সমস্যার উত্সটি আলাদা করতে না পারেন তবে কোডের ব্লকগুলি (এবং এইভাবে অস্থায়ীভাবে অপসারণ) ব্লক করে মন্তব্য শুরু করুন।

    • পার্সিং ত্রুটি থেকে মুক্তি পাওয়ার সাথে সাথেই আপনি সমস্যার উত্স খুঁজে পেয়েছেন। আরও নিবিড়ভাবে সেখানে দেখুন।

    • কখনও কখনও আপনি অস্থায়ীভাবে সম্পূর্ণ ফাংশন / পদ্ধতি ব্লকগুলি সরাতে চান। (তুলনামূলকভাবে কোঁকড়া ধনুর্বন্ধনী এবং ভুলভাবে ইনডেন্ট কোডের ক্ষেত্রে))

    • আপনি যখন সিনট্যাক্স সমস্যাটি সমাধান করতে পারবেন না, তখন স্ক্র্যাচ থেকে মন্তব্য করা অংশগুলি আবার লিখতে চেষ্টা করুন ।

  • একজন নবাগত হিসাবে, কিছু বিভ্রান্তিকর সিনট্যাক্স নির্মাণ এড়িয়ে চলুন।

    • টেরিনারি ? :কন্ডিশন অপারেটর কোডটি কমপ্যাক্ট করতে পারে এবং এটি সত্যই কার্যকর। তবে এটি সব ক্ষেত্রে পাঠযোগ্যতার সহায়তা করে না। বিপরীত অবস্থায় সরল ifবিবৃতি পছন্দ করুন ।

    • পিএইচপি-র বিকল্প সিনট্যাক্স ( if:/ elseif:/ endif;) টেমপ্লেটগুলির জন্য সাধারণ, তবে সাধারণ {কোড }ব্লকগুলির চেয়ে যথাযথভাবে অনুসরণ করা সহজ ।

  • সর্বাধিক প্রচলিত নবাগত ভুলগুলি হ'ল:

    • ;বিবৃতি / লাইন সমাপ্ত করার জন্য সেমিকোলনগুলি হারিয়েছে ।

    • এর মধ্যে "বা তার সাথে অপরিবর্তিত কোটগুলির সাথে মেলে না এমন স্ট্রিং কোট '

    • ভুলে যাওয়া অপারেটরগুলি, বিশেষত স্ট্রিং .কনটেনটেশনের জন্য।

    • ভারসাম্যহীন প্রথম (বন্ধনী )। সেগুলিকে রিপোর্ট করা লাইনে গণনা করুন। তাদের একটি সমান সংখ্যা আছে?

  • ভুলে যাবেন না যে একটি সিনট্যাক্স সমস্যা সমাধানের ফলে পরবর্তীটি উদ্ঘাটিত হতে পারে।

    • যদি আপনি একটি সমস্যা দূরে সরিয়ে যান, তবে নীচে কিছু কোডে অন্য ফসলগুলি আপ করা হয়, আপনি বেশিরভাগই সঠিক পথে।

    • যদি একই লাইনে কোনও নতুন সিনট্যাক্স ত্রুটিটি সম্পাদনা করা হয়, তবে আপনার চেষ্টা পরিবর্তন সম্ভবত ব্যর্থতা ছিল। (যদিও সবসময় না।)

  • আপনি যদি এটি ঠিক করতে না পারেন তবে পূর্ববর্তী ওয়ার্কিং কোডের একটি ব্যাকআপ পুনরুদ্ধার করুন।

    • একটি উত্স কোড সংস্করণ সিস্টেম গ্রহণ করুন। আপনি সর্বদা diffভাঙ্গা এবং শেষের সংস্করণ দেখতে পারেন । সিন্ট্যাক্স সমস্যাটি কী তা বোধগম্য হতে পারে।
  • অদৃশ্য বিপথগামী ইউনিকোড অক্ষর : কিছু ক্ষেত্রে, আপনার উত্সটিতে আপনাকে একটি হেক্সিডেটার বা ভিন্ন সম্পাদক / ভিউয়ার ব্যবহার করতে হবে । আপনার কোডটি দেখে কিছু সমস্যা খুঁজে পাওয়া যাবে না।

    • grep --color -P -n "\[\x80-\xFF\]" file.phpঅ-এএসসিআইআই প্রতীকগুলি খুঁজে পাওয়ার জন্য প্রথম পরিমাপ হিসাবে চেষ্টা করুন।

    • বিশেষত বিওএমগুলিতে শূন্য-প্রস্থের শূন্যস্থান বা অ-ব্রেকিং স্পেস এবং স্মার্ট কোটগুলি নিয়মিত উত্স কোডে প্রবেশ করতে পারে।

  • কোন ধরণের লাইনব্রেকগুলি ফাইলগুলিতে সংরক্ষণ করা হয় সেদিকে খেয়াল রাখুন

    • পিএইচপি কেবল \nনিউলাইনকে সম্মান করে , \rগাড়ীর রিটার্ন নয়।

    • যা ম্যাকওএস ব্যবহারকারীদের মাঝে মাঝে সমস্যা (এমনকি ভুল কনফিগার্ড সম্পাদকদের জন্য ওএস এক্সেও) is

    • যখন একক-লাইন //বা #মন্তব্য ব্যবহার করা হয় তখন এটি প্রায়শই একটি সমস্যা হিসাবে তলিয়ে যায় । একাধিক লাইন /*...*/মন্তব্য কদাপি পার্সার বিরক্ত করব linebreaks উপেক্ষিত পেতে পারি।

  • যদি আপনার সিনট্যাক্স ত্রুটিটি ওয়েবে সঞ্চারিত না করে : এটি ঘটে যে আপনার মেশিনে একটি সিনট্যাক্স ত্রুটি রয়েছে। তবে অনলাইনে খুব একই ফাইল পোস্ট করা এটি আর প্রদর্শন করে না। যা কেবল দুটি জিনিসের মধ্যে একটির অর্থ হতে পারে:

    • আপনি ভুল ফাইল তাকিয়ে আছেন!

    • অথবা আপনার কোডটিতে অদৃশ্য স্ট্রে ইউনিকোড রয়েছে (উপরে দেখুন)। আপনি সহজেই জানতে পারেন: কেবলমাত্র আপনার কোডটি ওয়েব ফর্ম থেকে আপনার পাঠ্য সম্পাদককে অনুলিপি করুন।

  • আপনার পিএইচপি সংস্করণ পরীক্ষা করুন । প্রতিটি সার্ভারে সমস্ত বাক্য গঠন রচনা উপলব্ধ নয় available

    • php -v কমান্ড লাইন দোভাষী জন্য

    • <?php phpinfo(); ওয়েব সার্ভারের মাধ্যমে অনুরোধ করা ব্যক্তির জন্য।


    এগুলি অগত্যা এক নয়। বিশেষত ফ্রেমওয়ার্কগুলির সাথে কাজ করার সময় আপনি সেগুলি মেলে ধরবেন।

  • ফাংশন / পদ্ধতি, শ্রেণি বা ধ্রুবকগুলির জন্য সনাক্তকারী হিসাবে পিএইচপি'র সংরক্ষিত কীওয়ার্ডগুলি ব্যবহার করবেন না ।

  • ট্রায়াল-অ্যান্ড-ত্রুটি হল আপনার শেষ অবলম্বন।

অন্য সমস্ত কিছু যদি ব্যর্থ হয় তবে আপনি সর্বদা আপনার ত্রুটি বার্তাটি গুগল করতে পারেন । সিনট্যাক্স চিহ্নগুলি সন্ধান করা ততটা সহজ নয় (স্ট্যাক ওভারফ্লো নিজেই সিম্বলহাউন্ড দ্বারা সূচিযুক্ত )। অতএব আপনি প্রাসঙ্গিক কিছু আবিষ্কার করার আগে এটি আরও কয়েকটি পৃষ্ঠা সন্ধান করতে পারে।

আরও গাইড:

মৃত্যুর সাদা পর্দা

যদি আপনার ওয়েবসাইটটি কেবল ফাঁকা থাকে, তবে সাধারণত একটি বাক্য গঠন ত্রুটির কারণ হয়। এর সাথে তাদের প্রদর্শন সক্ষম করুন:

  • error_reporting = E_ALL
  • display_errors = 1

আপনার php.iniসাধারণত বা .htaccessMod_php এর মাধ্যমে বা এমনকি .user.iniফাস্টসিজিআই সেটআপ সহ।

ভাঙা স্ক্রিপ্টের মধ্যে এটি সক্ষম করা খুব দেরী কারণ পিএইচপি এমনকি প্রথম লাইনের ব্যাখ্যা / চালাতে পারে না। একটি দ্রুত কাজটি একটি মোড়ক স্ক্রিপ্ট তৈরি করছে, বলুন test.php:

<?php
   error_reporting(E_ALL);
   ini_set("display_errors", 1);
   include("./broken-script.php");

তারপরে এই মোড়ক স্ক্রিপ্টটি অ্যাক্সেস করে ব্যর্থ কোডটি প্রার্থনা করুন।

এইচটিটিপি 500 প্রতিক্রিয়াগুলির সাথে স্ক্রিপ্ট ক্র্যাশ হলে এটি পিএইচপি সক্ষম করতে error_logএবং আপনার ওয়েবসারভারেরerror.log সন্ধান করতে সহায়তা করে ।


error_reporting(E_ALL | E_STRICT);পিএইচপি এর পূর্ববর্তী সংস্করণগুলির জন্য
জিও

2
কিছু আইডিই (নেটবিয়ানদের মতো) কেবল সিনট্যাক্স হাইলাইটিংকেই সমর্থন করে না তবে কোড বিন্যাসকেও সমর্থন করে। আপনি যদি নিজের কোডটি সঠিকভাবে ফর্ম্যাট করার অভ্যাসে পান এবং সময় সময় আইডিইটিকে পুনরায় ফর্ম্যাট করতে বলেন তবে আপনি তুলনাহীন ধনুর্বন্ধনীগুলির মতো সমস্যা স্পষ্ট করতে পারেন।
জোসেপ ভলস

115

আমি মনে করি এই বিষয়টি পুরোপুরি অতিরিক্ত বিবেচনা করা / অত্যধিক জটিল is কোনও আইডিই ব্যবহার করা কোনও সিনট্যাক্স ত্রুটি সম্পূর্ণভাবে এড়াতে যাওয়ার উপায়। আমি এমনকি এও বলব যে আইডিই ব্যতীত কাজ করা একধরনের পেশাগত নয়। কেন? কারণ আধুনিক আইডিইগুলি আপনার টাইপ করা প্রতিটি চরিত্রের পরে আপনার সিনট্যাক্স পরীক্ষা করে। যখন আপনি কোড করেন এবং আপনার পুরো লাইনটি লাল হয়ে যায় এবং একটি বড় সতর্কতা বিজ্ঞপ্তি আপনাকে সঠিক ধরন এবং বাক্য গঠন ত্রুটির সঠিক অবস্থান প্রদর্শন করে, তারপরে আর কোনও সমাধান অনুসন্ধান করার দরকার নেই।

একটি সিনট্যাক্স-চেকিং IDE এর অর্থ:

আপনি (কার্যকরভাবে) আর কখনও বাক্যবিন্যাস ত্রুটিগুলিতে চলে যাবেন না, কেবল কারণ আপনি টাইপ করার সাথে সাথে সেগুলি দেখতে পান। সিরিয়াসলি।

সিনট্যাক্স চেক সহ দুর্দান্ত আইডিই (তাদের সবকটি লিনাক্স, উইন্ডোজ এবং ম্যাকের জন্য উপলব্ধ):

  1. নেটবিনস [বিনামূল্যে]
  2. PHPStorm [ tor 199 ডলার]
  3. পিএইচপি প্লাগইন সহ গ্রহন [বিনামূল্যে]
  4. সাব্লাইম [$ 80 মার্কিন ডলার] (মূলত একটি পাঠ্য সম্পাদক, তবে পিএইচপি সিনট্যাক্স পার্সারের মতো প্লাগইনগুলির সাথে প্রসারণযোগ্য )

2
এটা সুস্পষ্টভাবে. তবে, এখানে আইডিইগুলি প্রতিস্থাপন করে, আপনি কি তাদের বিশৃঙ্খলা সহায়কতার তুলনায় কিছুটা বিস্তৃত করতে পারেন? সুব্লাইম বেশিরভাগ সম্পাদক, আইডিই নয়; তবে তারপরে আরও সুন্দর এবং চটজলদি; প্রাথমিকভাবে কেবল হাইলাইটিংয়ের সিনট্যাক্স করে তবে বন্ধনী ম্যাচিংয়ে এটিও কার্যকর। এটি সহজেই T_CONSTANT_AND_ENCAPSED ত্রুটিগুলি তাত্ক্ষণিকভাবে আবিষ্কার করে, পিএইচপিএস স্টর্মের মত নয়; যা ইনলাইন ত্রুটির জন্য আরও স্কুইগ্লি লাইন করে। নেটবিন্স সিনট্যাক্সের ইঙ্গিতগুলি পিএইচপি (এমপি) এর চেয়েও বেশি ক্রিপ্টিক ব্যবহৃত হত (পরিবর্তিত অনুমোদিত কনস্ট্রাক্টগুলিকে বাদ দিয়ে)। আপনি কি নিজের অভিজ্ঞতা / পরামর্শ নিয়ে ভাগ করে নিতে পারেন; আপনার প্রিয় গ্রহণ / PDT বা ..?
মারিও

@ আমারিও আমি মনে করি আপনি সত্যিই বিষয়টির গভীর are একটি সিনট্যাক্স ত্রুটি সহ। সুতরাং আমি কমপক্ষে নেটবিয়ান / পিএইচপিএসটারমের সিনট্যাক্স চেকটি অত্যন্ত শক্তিশালী বলে মনে করি। তবে আমি আপনার প্রশ্নটি ভুলভাবে লিখেছি। গিম্ম কয়েক ঘন্টা ...;)
স্লিক

আপনার উত্তর ইতিমধ্যে স্পট আছে। আমাদের প্রশ্নগুলির 99% ফিট করবে। তবে এখানকার প্রেক্ষাপটের জন্য আমি একটি বাণিজ্য-বিবেচনা চাই যা আইডিই আরও নবাগত বান্ধব সরঞ্জামদণ্ড সরবরাহ করে । এটি সম্ভবত আমাদের কাছে অপ্রাপ্তবয়স্ক, রঙিনকরণ এবং স্কুইগলি লাইনগুলি যথেষ্ট পরিমাণে দক্ষ থাকলে আপনার পক্ষে যথেষ্ট sufficient তবে আমি ধারণা করছি যে পার্থক্যগুলি নতুনদের জন্য আরও তাত্পর্যপূর্ণ হতে পারে।
মারিও

কখনও কখনও একটি আইডিই একটি সম্ভাব্য বিকল্প নয়। উদাহরণস্বরূপ, কোনও ওয়ার্ডপ্রেস থিম বা প্লাগইনে দ্রুত সম্পাদনা করা। হ্যাঁ, আমি সমস্ত কোড কোনও আইডিইতে অনুলিপি করতে পারতাম, তবে তারপরে আমাকে এটি খুলতে হবে, এটি এখানে সমস্তটি আটকে দিতে হবে, শিরোনামগুলি সেট করতে হবে এবং অন্যান্য সময় নষ্ট করা বর্জ্য বানাতে হবে, যখন আমি কেবল দ্রুত সম্পাদনার জন্য আশা করছি। এখন, আপনি যদি নতুন বৈশিষ্ট্য বিকাশ করছেন বা স্ক্র্যাচ থেকে শুরু করছেন, তবে হ্যাঁ, এটি কোনও আইডিইতে করুন। এটি সেট আপ করার জন্য আপনি অতিরিক্ত সময়ে কিছুটা সময় নিয়ে আফসোস করবেন না।
1934286

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

58

অপ্রত্যাশিত [

আজকাল, অপ্রত্যাশিত [অ্যারে বন্ধনী সাধারণত পুরানো পিএইচপি সংস্করণে দেখা যায়। সংক্ষিপ্ত অ্যারে সিনট্যাক্স প্রাপ্তিসাধ্য পিএইচপি যেহেতু হয় > = 5.4 । পুরানো ইনস্টলেশন কেবল সমর্থন করে array()

$php53 = array(1, 2, 3);
$php54 = [1, 2, 3];
         

অ্যারে ফাংশন ফলাফলের সমালোচনা একইভাবে পুরানো পিএইচপি সংস্করণগুলির জন্য উপলভ্য নয়:

$result = get_whatever()["key"];
                      

রেফারেন্স - পিএইচপি-তে এই ত্রুটিটির অর্থ কী? - "সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত \[" সর্বাধিক সাধারণ এবং ব্যবহারিক কাজের ক্ষেত্র দেখায়।

যদিও আপনি নিজের পিএইচপি ইনস্টলেশনটি আপগ্রেড করার চেয়ে সর্বদা ভাল always ভাগ করা ওয়েব হোস্টিং পরিকল্পনার জন্য, প্রথম গবেষণা যদি উদাহরণস্বরূপ SetHandler php56-fcgiএকটি নতুন রানটাইম সক্ষম করতে ব্যবহার করা যায়।

আরো দেখুন:

বিটিডাব্লু, প্রিপ্রসেসর এবং পিএইচপি 5.4 এর সিনট্যাক্স ডাউন-রূপান্তরকারী রয়েছে যদি আপনি সত্যিই পুরানো + ধীর পিএইচপি সংস্করণগুলির সাথে আঁকড়ে থাকেন।

অপ্রত্যাশিত[ বাক্য গঠন ত্রুটির অন্যান্য কারণ causes

যদি এটি পিএইচপি সংস্করণটি মেলে না, তবে এটি প্রায়শই একটি সাধারণ টাইপ বা নতুন আগত সিনট্যাক্স ভুল:

  • আপনি ক্লাসে অ্যারে সম্পত্তি ঘোষণা / এক্সপ্রেশন ব্যবহার করতে পারবেন না , এমনকি পিএইচপি 7 তেও নয়।

    protected $var["x"] = "Nope";
                  
    
  • [কোঁকড়া ধনুর্বন্ধনী {বা বন্ধনী খোলার সাথে বিভ্রান্ত (করা একটি সাধারণ তদারকি।

    foreach [$a as $b)
            
    

    অথবা এমনকি:

    function foobar[$a, $b, $c] {
                   
    
  • অথবা অ্যারে হিসাবে স্থায়ী (পিএইচপি 5.6 এর আগে) ডিপ্রেশন করার চেষ্টা করছেন:

    $var = const[123];
           
    

    কমপক্ষে পিএইচপি এটি constএকটি ধ্রুবক নাম হিসাবে ব্যাখ্যা করে ।

    যদি আপনি কোনও অ্যারে ভেরিয়েবল অ্যাক্সেস করতে চেয়েছিলেন (যা এখানে সাধারণ কারণ), তবে শীর্ষস্থানীয় $সিগিল যুক্ত করুন - সুতরাং এটি একটি হয়ে যায় $varname

  • আপনি globalকোনও এসোসিয়েটিভ অ্যারের সদস্যের কীওয়ার্ডটি ব্যবহার করার চেষ্টা করছেন । এটি বৈধ সিনট্যাক্স নয়:

    global $var['key'];


অপ্রত্যাশিত ] বন্ধ বর্গাকার বন্ধনী

এটি কিছুটা বিরল, তবে সমাপ্তি অ্যারে ]বন্ধনী সহ সিনট্যাক্স দুর্ঘটনাও রয়েছে ।

  • আবার প্রথম )বন্ধনী বা }কোঁকড়া ধনুর্বন্ধনী সঙ্গে মিল নেই:

    function foobar($a, $b, $c] {
                              
    
  • বা এমন অ্যারে শেষ করার চেষ্টা করছেন যেখানে একটি নেই:

    $var = 2];

    যা প্রায়শই বহু-লাইন এবং নেস্টেড অ্যারে ঘোষণায় ঘটে ।

    $array = [1,[2,3],4,[5,6[7,[8],[9,10]],11],12]],15];
                                                 
    

    যদি তা হয় তবে কোনও অকালীন ]অ্যারে বন্ধের সন্ধান করতে ব্র্যাককেট মিলের জন্য আপনার আইডিই ব্যবহার করুন । এটিকে সঙ্কুচিত করার জন্য খুব কম সময়ে আরও স্পেসিং এবং নিউলাইনগুলি ব্যবহার করুন।


উপরের লিঙ্কটি 'পিএইচপি 5.4 সিনট্যাক্স ডাউন-রূপান্তরকারী' github.com/IonutBajescu/short-arrays-to-long-arrays উপরের অংশটি ভেঙে গেছে।
দানিমাল

46

অপ্রত্যাশিত T_VARIABLE

একটি "অপ্রত্যাশিত T_VARIABLE" এর অর্থ একটি আক্ষরিক $variableনাম আছে যা বর্তমান প্রকাশ / বিবৃতি কাঠামোর সাথে খাপ খায় না।

উদ্দেশ্যমূলকভাবে বিমূর্ত / নিখুঁত অপারেটর + $ ভেরিয়েবল ডায়াগ্রাম

  1. যতিচিহ্নের কমতি আছে

    এটি বেশিরভাগ ক্ষেত্রে পূর্ববর্তী লাইনে একটি অনুপস্থিত সেমিকোলন নির্দেশ করে । একটি বিবৃতি অনুসরণ করে চলক অ্যাসাইনমেন্ট একটি ভাল নির্দেশক যেখানে দেখতে হবে:

           
    func1()
    $var = 1 + 2;     # parse error in line +2
  2. স্ট্রিং সংযোগ

    ঘন ঘন দুর্ঘটনা হ'ল ভুলে যাওয়া .অপারেটরের সাথে স্ট্রিং কনটেনটেশনগুলি :

                                   
    print "Here comes the value: "  $value;

    বিটিডব্লিউ, আপনার যখনই পঠনযোগ্যতা সহায়তা করে তখন স্ট্রিং ইন্টারপোলেশন (ডাবল কোটগুলিতে বেসিক ভেরিয়েবল) পছন্দ করা উচিত । যা এই সিনট্যাক্স সমস্যাগুলি এড়িয়ে চলে।

    স্ট্রিং ইন্টারপোলেশন একটি স্ক্রিপ্টিং ভাষার মূল বৈশিষ্ট্য। এটি ব্যবহার করতে কোন লজ্জা। ভেরিয়েবল .কনটেনটেশন দ্রুত হওয়া সম্পর্কে কোনও মাইক্রো-অপ্টিমাইজেশান পরামর্শ উপেক্ষা করুন । এটা না।

  3. এক্সপ্রেশন অপারেটরগুলি অনুপস্থিত

    অবশ্যই একই সমস্যা অন্যান্য প্রকাশে উত্থাপিত হতে পারে, উদাহরণস্বরূপে গাণিতিক ক্রিয়াকলাপগুলি:

               
    print 4 + 7 $var;

    পিএইচপি এখানে অনুমান করতে পারে না যে চলকটি যুক্ত, বিয়োগ বা তুলনা ইত্যাদি করা উচিত ছিল etc.

  4. তালিকাসমূহ

    সিনট্যাক্স তালিকার জন্য একই, অ্যারে জনসংখ্যার মতো যেখানে পার্সার এছাড়াও একটি প্রত্যাশিত কমা নির্দেশ করে ,উদাহরণস্বরূপ:

                                          
    $var = array("1" => $val, $val2, $val3 $val4);

    বা পরামিতি তালিকা ফাংশন:

                                    
    function myfunc($param1, $param2 $param3, $param4)

    সমানভাবে আপনি এটিকে listবা globalবিবৃতি দিয়ে দেখেন বা যখন ;কোনও forলুপে অর্ধিকোলনের অভাব রয়েছে ।

  5. শ্রেণির ঘোষণা

    এই পার্সার ত্রুটি শ্রেণির ঘোষণায়ও ঘটে । আপনি কেবল স্থিতিশীল ধ্রুবককে বরাদ্দ করতে পারেন, এক্সপ্রেশন নয়। সুতরাং পার্সার নির্ধারিত ডেটা হিসাবে ভেরিয়েবল সম্পর্কে অভিযোগ করে:

    class xyz {      
        var $value = $_GET["input"];

    তুলনামূলকভাবে }বন্ধ হওয়া কোঁকড়া ধনুর্বন্ধনী এখানে বিশেষ নেতৃত্ব দিতে পারে। যদি কোনও পদ্ধতি খুব তাড়াতাড়ি সমাপ্ত হয় (যথাযথ ইনডেন্টেশন ব্যবহার করুন!), তবে একটি বিপথগামী ভেরিয়েবল সাধারণত শ্রেণির ঘোষণার বডিটিতে ভুলভাবে স্থানান্তরিত হয়।

  6. শনাক্তকারীদের পরে পরিবর্তনশীল

    আপনার কাছে কোনও ভেরিয়েবল সরাসরি কোনও শনাক্তকারী অনুসরণ করতে পারে না :

                 
    $this->myFunc$VAR();

    বিটিডব্লিউ, এটি একটি সাধারণ উদাহরণ যেখানে অভিপ্রায়টি সম্ভবত ভেরিয়েবল ভেরিয়েবলগুলি ব্যবহার করার ছিল । এই ক্ষেত্রে $this->{"myFunc$VAR"}();উদাহরণস্বরূপ একটি পরিবর্তনীয় সম্পত্তি অনুসন্ধান ।

    মনে রাখবেন ভেরিয়েবল ভেরিয়েবল ব্যবহার ব্যতিক্রম হওয়া উচিত। নতুনরা প্রায়শই এগুলিকে খুব বেশি দুর্ঘটনাবশত ব্যবহার করার চেষ্টা করে, এমনকি যখন অ্যারেগুলি সহজ এবং আরও উপযুক্ত হয়।

  7. ভাষা গঠনের পরে অনুপস্থিত অনুচ্ছেদে

    দ্রুতগতি টাইপিং বিস্মৃত ওপেনিং বা জন্য প্রথম বন্ধনী বন্ধ হয়ে উঠতে পারে ifএবং forএবং foreachবিবৃতি:

           
    foreach $array as $key) {

    সমাধান: (বিবৃতি এবং ভেরিয়েবলের মধ্যে অনুপস্থিত খোলার যোগ করুন ।

                          
    if ($var = pdo_query($sql) {
         $result = 

    প্রথমে ক্লোজিং বন্ধনী দিয়ে এক্সপ্রেশনটি {বন্ধ না করে কোঁকড়া ধনুর্বন্ধক কোড ব্লকটি খোলেন না ।if)

  8. অন্য শর্ত আশা করে না

         
    else ($var >= 0)

    সমাধান: শর্তগুলি elseব্যবহার করুন বা সরিয়ে দিন elseif

  9. বন্ধের জন্য বন্ধনী প্রয়োজন

         
    function() uses $var {}

    সমাধান: চারদিকে বন্ধনী যুক্ত করুন $var

  10. অদৃশ্য সাদা স্থান

    "অদৃশ্য স্ট্রে ইউনিকোড" (যেমন একটি অ-ব্রেকিং স্পেস ) এর রেফারেন্স উত্তরে উল্লিখিত হিসাবে, আপনি অনিচ্ছাকৃত কোডের জন্যও এই ত্রুটি দেখতে পাবেন:

    <?php
                              
    $var = new PDO(...);

    এটি ফাইলগুলির শুরুতে এবং অনুলিপি-এবং-আটকানো কোডের জন্য বরং প্রচলিত। কোনও হেক্সিডিটারের সাথে চেক করুন, যদি আপনার কোডটি দৃশ্যমানভাবে সিন্ট্যাক্স সমস্যা না দেখায়।

আরো দেখুন


32

অপ্রত্যাশিত T_CONSTANT_ENCAPSED_STRING
অপ্রত্যাশিত T_ENCAPSED_AND_WHITESPACE

অমনোযোগী নাম T_CONSTANT_ENCAPSED_STRINGএবং T_ENCAPSED_AND_WHITESPACEউদ্ধৃত আক্ষরিক উল্লেখ করুন ।"string"

এগুলি বিভিন্ন প্রসঙ্গে ব্যবহৃত হয়, তবে সিনট্যাক্সের বিষয়টি বেশ মিল similar T_ENCAPSED… সতর্কতাগুলি ডাবল উদ্ধৃত স্ট্রিং প্রসঙ্গে দেখা যায়, অন্যদিকে T_CONSTANT… স্ট্রিংগুলি প্রায়শই সরল পিএইচপি এক্সপ্রেশন বা বিবৃতিতে বিপথগামী হয়।

  1. ভুল ভেরিয়েবল ইন্টারপোলেশন

    এবং এটি সবচেয়ে বেশি ঘন ঘন ভুল পিএইচপি ভেরিয়েবল ইন্টারপোলেশন জন্য আসে:

                                   
    echo "Here comes a $wrong['array'] access";

    অ্যারে কীগুলির উদ্ধৃতি পিএইচপি প্রসঙ্গে আবশ্যক। তবে ডাবল উদ্ধৃত স্ট্রিংগুলিতে (বা HEREDOCs) এটি একটি ভুল। বিশিষ্ট একক উদ্ধৃত থাকা সম্পর্কে পার্সার অভিযোগ করে 'string', কারণ এটি সাধারণত সেখানে একটি আক্ষরিক শনাক্তকারী / কী আশা করে।

    আরও পরিষ্কারভাবে অ্যারে রেফারেন্সের জন্য ডাবল কোটের মধ্যে পিএইচপি 2-স্টাইলের সাধারণ সিনট্যাক্স ব্যবহার করা বৈধ :

    echo "This is only $valid[here] ...";

    নেস্টেড অ্যারে বা আরও গভীর অবজেক্টের রেফারেন্সগুলির জন্য জটিল কোঁকড়ানো স্ট্রিং এক্সপ্রেশন সিনট্যাক্সের প্রয়োজন:

    echo "Use {$array['as_usual']} with curly syntax.";

    যদি অনিশ্চিত হয় তবে এটি সাধারণত ব্যবহার করা নিরাপদ। এটি প্রায়শই আরও পাঠযোগ্য বলে বিবেচিত হয়। এবং আরও ভাল আইডিই প্রকৃতপক্ষে এর জন্য স্বতন্ত্র বাক্য বিন্যাস ব্যবহার করে।

  2. অনুপস্থিত

    যদি কোনও স্ট্রিংয়ের একটি এক্সপ্রেশন অনুসরণ করে তবে তার মধ্যে একটি কনটেন্টেশন বা অন্য অপারেটরের অভাব রয়েছে, তবে আপনি পিএইচপিকে স্ট্রিং আক্ষরিক সম্পর্কে অভিযোগ দেখতে পাবেন:

                           
    print "Hello " . WORLD  " !";

    যদিও এটি আপনার এবং আমার কাছে স্পষ্ট, পিএইচপি কেবল অনুমান করতে পারে না যে স্ট্রিংটি সেখানে যুক্ত করা হয়েছিল।

  3. বিভ্রান্তিকর স্ট্রিং উদ্ধৃতি এনক্লোজারগুলি

    বিস্মৃত স্ট্রিং ডিলিমিটারগুলিতে একই সিনট্যাক্স ত্রুটি ঘটে । একক 'বা ডাবল "উদ্ধৃতি দ্বারা শুরু করা একটি স্ট্রিংও একই সাথে শেষ হয়।

                    
    print "<a href="' . $link . '">click here</a>";
          ⌞⎽⎽⎽⎽⎽⎽⎽⎽⌟⌞⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⌟⌞⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⌟

    এই উদাহরণটি ডাবল উক্তি দিয়ে শুরু হয়েছিল। তবে ডাবল উদ্ধৃতিগুলি এইচটিএমএল বৈশিষ্ট্যের জন্যও নির্ধারিত ছিল। এর মধ্যে লক্ষ্যযুক্ত কনটেনটেশন অপারেটরটি একক উদ্ধৃতিতে দ্বিতীয় স্ট্রিংয়ের অংশ হিসাবে ব্যাখ্যা করা যায়।

    টিপ : একক এবং ডাবল উদ্ধৃত স্ট্রিংগুলির জন্য কিছুটা স্বতন্ত্র রঙিন ব্যবহার করতে আপনার সম্পাদক / আইডিই সেট করুন। (এটি পাঠ্য আউটপুটের জন্য ডাবল উদ্ধৃত স্ট্রিংগুলি এবং কেবল ধ্রুবক-জাতীয় মানের জন্য একক উদ্ধৃত স্ট্রিং পছন্দ করতে অ্যাপ্লিকেশন যুক্তিকে সহায়তা করে))

    এটি একটি ভাল উদাহরণ যেখানে আপনার প্রথম স্থানে ডাবল উক্তিগুলি ছিন্ন করা উচিত নয়। পরিবর্তে কেবল এইচটিএমএল বৈশিষ্ট্য´ উদ্ধৃতিগুলির জন্য যথাযথ \"পলায়ন ব্যবহার করুন:

    print "<a href=\"{$link}\">click here</a>";

    এটি সিনট্যাক্স বিভ্রান্তির দিকেও নিয়ে যেতে পারে, তবে আরও ভাল সমস্ত আইডিই / সম্পাদকরা পালিয়ে থাকা উদ্ধৃতিগুলিকে অন্যরকম করে রঙিন করে আবার সহায়তা করে।

  4. খোলার উদ্বোধনী উদ্ধৃতি

    সমানভাবে পার্সার ত্রুটির জন্য একটি রেসিপি খোলার কথা "/ 'উদ্ধৃতিগুলি ভুলে গেছে :

                   
     make_url(login', 'open');

    এখানে ', ', একটি bareword পর একটি স্ট্রিং আক্ষরিক হয়ে যখন স্পষ্টত হবে loginএকটি স্ট্রিং প্যারামিটার হতে অভিপ্রেত ছিল।

  5. অ্যারে তালিকা

    আপনি যদি ,অ্যারে তৈরির ব্লকে কমাটি মিস করেন তবে পার্সার দুটি পরপর স্ট্রিং দেখতে পাবে:

    array(               
         "key" => "value"
         "next" => "....",
    );

    মনে রাখবেন যে সর্বশেষ লাইনে সর্বদা অতিরিক্ত কমা থাকতে পারে তবে এর মধ্যে একটিকে অবহেলা করা অযোগ্য। সিনট্যাক্স হাইলাইট না করে যা আবিষ্কার করা শক্ত।

  6. ফাংশন প্যারামিটার তালিকা

    ফাংশন কলগুলির জন্য একই জিনিস :

                             
    myfunc(123, "text", "and"  "more")
  7. পালানো স্ট্রিং

    একটি সাধারণ প্রকরণটি বেশ সহজভাবে ভুলে যাওয়া স্ট্রিং টার্মিনেটরগুলি:

                                    
    mysql_evil("SELECT * FROM stuffs);
    print "'ok'";
          ⇑

    এখানে পিএইচপি দু'টি স্ট্রিং লিটারেল সরাসরি একে অপরকে অনুসরণ করার অভিযোগ করে। তবে আসল কারণটি অবশ্যই অনাবৃত পূর্ববর্তী স্ট্রিং।

আরো দেখুন


27

অপ্রত্যাশিত T_STRING

T_STRINGএকটি বিমুগ্ধকর কিছু। এটি কোনও উদ্ধৃতকে উল্লেখ করে না "string"। এর অর্থ একটি কাঁচা শনাক্তকারীর মুখোমুখি হয়েছিল। এটি bareশব্দ থেকে বাকী CONSTANTবা ফাংশন নাম, ভুলে যাওয়া অবিরত স্ট্রিং, বা কোনও সাধারণ পাঠ্য পর্যন্ত হতে পারে।

  1. ভুল পংক্তি

    এই সিনট্যাক্স ত্রুটিটি অবশ্য ভুল স্ট্রিংয়ের মানগুলির জন্য সবচেয়ে সাধারণ। যে কোনও অনস্কেপড এবং বিপথগামী "বা 'উদ্ধৃতিটি একটি অবৈধ অভিব্যক্তি গঠন করবে:

                                     
     echo "<a href="http://example.com">click here</a>";

    সিনট্যাক্স হাইলাইট করা এ জাতীয় ভুলকে সুস্পষ্ট করে তুলবে। \"ডাবল উদ্ধৃতি বা \'একক উদ্ধৃতি থেকে বেরিয়ে আসার জন্য ব্যাকস্ল্যাশ ব্যবহার করা মনে রাখা গুরুত্বপূর্ণ - যার উপর নির্ভর করে স্ট্রিং ঘের হিসাবে ব্যবহৃত হয়েছিল ।

    • সুবিধার জন্য আপনার ডাবল উদ্ধৃতি সহ সরল এইচটিএমএল আউটপুট দেওয়ার সময় বাইরের একক উক্তিগুলি পছন্দ করা উচিত।
    • আপনি যদি ভেরিয়েবলগুলি ইন্টারপোল্ট করতে চান তবে ডাবল কোটেড স্ট্রিং ব্যবহার করুন তবে আক্ষরিক "ডাবল উদ্ধৃতি থেকে বেরিয়ে আসার জন্য নজর রাখুন ।
    • দীর্ঘতর আউটপুটের জন্য, বাইরে বেরিয়ে আসার পরিবর্তে একাধিক echo/ printলাইন পছন্দ করুন । আরও ভাল একটি HEREDOC বিভাগ বিবেচনা করুন ।

    অন্য একটি উদাহরণ পিএইচপি দিয়ে উত্পন্ন HTML কোডের ভিতরে পিএইচপি এন্ট্রি ব্যবহার করছে:

    $text = '<div>some text with <?php echo 'some php entry' ?></div>'

    এটি ঘটে যদি $textঅনেকগুলি লাইন সহ বড় হয় এবং বিকাশকারী পুরো পিএইচপি ভেরিয়েবলের মান দেখতে না পায় এবং এর উত্সটি ভুলে থাকা কোডের অংশে ফোকাস করে। উদাহরণ এখানে

    আরও দেখুন পিএইচপি-তে একক-উদ্ধৃত এবং ডাবল-কোটেড স্ট্রিংগুলির মধ্যে পার্থক্য কী?

  2. অনাবৃত স্ট্রিং

    আপনি যদি কোনও সমাপন মিস করেন" তবে একটি বাক্য গঠন ত্রুটি সাধারণত পরে ঘটে। একটি নির্বিঘ্ন স্ট্রিং প্রায়শই পরবর্তী উদ্দেশ্যযুক্ত স্ট্রিংয়ের মান না হওয়া পর্যন্ত কিছুটা কোড ব্যবহার করে:

                                                           
    echo "Some text", $a_variable, "and some runaway string ;
    success("finished");
             ⇯

    এটি কেবল আক্ষরিক নয় T_STRINGযা পার্সার তখন প্রতিবাদ করতে পারে। Unexpected '>'অপ্রত্যাশিত আক্ষরিক এইচটিএমএল এর জন্য আরও ঘন ঘন প্রকরণ হ'ল ।

  3. নন-প্রোগ্রামিং স্ট্রিং কোট

    আপনি যদি কোনও ব্লগ বা ওয়েবসাইট থেকে কোড অনুলিপি করে আটকান , আপনি কখনও কখনও অবৈধ কোড দিয়ে শেষ করেন। টাইপোগ্রাফিক কোটগুলি পিএইচপি প্রত্যাশা করে না:

    $text = Something something..’ + these ain't quotes”;

    টাইপোগ্রাফিক / স্মার্ট উদ্ধৃতিগুলি ইউনিকোড প্রতীক। পিএইচপি তাদের সাথে সংলগ্ন বর্ণমালা পাঠ্যের অংশ হিসাবে আচরণ করে। উদাহরণস্বরূপ ”theseধ্রুবক সনাক্তকারী হিসাবে ব্যাখ্যা করা হয়। তবে নিম্নলিখিত যে কোনও পাঠ্য আক্ষরিক তা পরে পার্সার দ্বারা একটি বেয়ারওয়ার্ড / T_STRING হিসাবে দেখা যাবে।

  4. নিখোঁজ সেমিকোলন; আবার

    পূর্ববর্তী লাইনে যদি আপনার একটি নিরবচ্ছিন্ন প্রকাশ থাকে তবে নিম্নলিখিত নিম্নলিখিত বিবৃতি বা ভাষা নির্ধারণকে কাঁচা শনাক্তকারী হিসাবে দেখা হবে:

           
    func1()
    function2();

    পিএইচপি কেবল তখন জানতে পারে না যে আপনি অন্যের পরে দুটি ফাংশন পরিচালনা করতে চেয়েছিলেন, বা যদি আপনি তাদের ফলাফলগুলি বহুগুণ, সংযুক্তি, তুলনা, বা কেবল একটি ||বা অন্যটি চালাচ্ছেন বলে বোঝাচ্ছেন ।

  5. <?xmlপিএইচপি স্ক্রিপ্টগুলিতে সংক্ষিপ্ত খোলা ট্যাগ এবং শিরোনাম

    এটি বরং অস্বাভাবিক। তবে যদি শর্ট_পেন_ট্যাগগুলি সক্ষম করা থাকে, তবে আপনি আপনার পিএইচপি স্ক্রিপ্টগুলি এক্সএমএল ঘোষণা দিয়ে শুরু করতে পারবেন না :

          
    <?xml version="1.0"?>

    পিএইচপি এটি দেখতে পাবে <?এবং এটি নিজের জন্য পুনরায় দাবি করবে। এটি বিপথগামী কী xmlবোঝাতে চেয়েছিল তা বুঝতে পারে না । এটি ধ্রুবক হিসাবে ব্যাখ্যা করা হবে। তবে versionইশাকে অন্য আক্ষরিক / ধ্রুবক হিসাবে দেখা হবে। এবং যেহেতু পার্সার উভয় পরবর্তী অক্ষর / মানগুলির মধ্যে কোনও এক্সপ্রেশন অপারেটর ছাড়া ধারণা করতে পারে না, এটি পার্সার ব্যর্থতা হবে।

  6. অদৃশ্য ইউনিকোড অক্ষর

    সিনট্যাক্স ত্রুটির জন্য সবচেয়ে ঘৃণ্য কারণ হ'ল ইউনিকোড প্রতীক, যেমন নন-ব্রেকিং স্পেস । পিএইচপি ইউনিকোড অক্ষর সনাক্তকারী নাম হিসাবে অনুমতি দেয়। আপনি যদি পুরোপুরি অসতর্কিত কোডের জন্য কোনও T_STRING পার্সার অভিযোগ পান তবে:

    <?php
        print 123;

    আপনাকে অন্য একটি পাঠ্য সম্পাদক ছিন্ন করতে হবে। বা একটি হেক্সিডেটার এমনকি। এখানে সরল স্পেস এবং নিউলাইনগুলির মতো দেখতে কী অদৃশ্য অবিচ্ছিন্ন থাকতে পারে। জাভা-ভিত্তিক আইডিইগুলি কখনও কখনও কোনও ইউটিএফ -8 বিওএমের মধ্যে মাংগল করা, শূন্য-প্রস্থের স্পেস, অনুচ্ছেদ বিভাজক ইত্যাদি সম্পর্কে অজ্ঞ থাকে everything

    আপনি ;প্রতিটি লাইনের শুরুতে অপ্রয়োজনীয় স্টেটমেন্ট বিভাজক যুক্ত করে এটি সঙ্কুচিত করতে পারেন :

    <?php
        ;print 123;

    এখানে অতিরিক্ত ;অর্ধসোলন পূর্ববর্তী অদৃশ্য চরিত্রটিকে একটি সংজ্ঞায়িত ধ্রুবক রেফারেন্সে (বিবৃতি হিসাবে অভিব্যক্তি) রূপান্তর করবে। বিনিময়ে যা পিএইচপি একটি সহায়ক বিজ্ঞপ্তি উত্পাদন করে।

  7. পরিবর্তনশীল নামের সামনে missing $ `চিহ্নটি অনুপস্থিত

    পিএইচপি-তে ভেরিয়েবলগুলি ডলার সাইন দ্বারা প্রতিনিধিত্ব করা হয় তার পরে ভেরিয়েবলের নাম।

    ডলার সাইন ( $) একটি সিগিল যা ভেরিয়েবলের নাম হিসাবে সনাক্তকারীকে চিহ্নিত করে। এই সিগিল ছাড়া সনাক্তকারী একটি ভাষা কীওয়ার্ড বা ধ্রুবক হতে পারে ।

    এটি একটি সাধারণ ত্রুটি যখন পিএইচপি কোডটি অন্য ভাষায় লিখিত কোড (সি, জাভা, জাভাস্ক্রিপ্ট ইত্যাদি) থেকে "অনুবাদ" করা হয়েছিল । এই জাতীয় ক্ষেত্রে, চলক প্রকারের ঘোষণাপত্র (যখন মূল কোডটি এমন ভাষায় লেখা হত যা টাইপযুক্ত ভেরিয়েবলগুলি ব্যবহার করে )ও এই ত্রুটিটি লুকিয়ে থাকতে পারে।

  8. পালানো উদ্ধৃতি চিহ্নগুলি marks

    আপনি যদি \কোনও স্ট্রিং ব্যবহার করেন তবে এর একটি বিশেষ অর্থ রয়েছে। একে " এস্কেপ চরিত্র " বলা হয় এবং সাধারণত পার্সারকে পরবর্তী অক্ষরটি আক্ষরিকভাবে নিতে বলে।

    উদাহরণ: echo 'Jim said \'Hello\'';মুদ্রণ করবেJim said 'hello'

    যদি আপনি কোনও স্ট্রিংয়ের সমাপ্তি উদ্ধৃতিটি থেকে অব্যাহতি পান তবে সমাপনী উদ্ধৃতিটি আক্ষরিকভাবে নেওয়া হবে এবং উদ্দেশ্য হিসাবে নয়, অর্থাত্ স্ট্রিংয়ের অংশ হিসাবে একটি মুদ্রণযোগ্য উদ্ধৃতি হিসাবে এবং স্ট্রিংটি বন্ধ না করে। এটি আপনি পরবর্তী স্ট্রিংটি খোলার পরে বা স্ক্রিপ্টের শেষে সাধারণত পার্স ত্রুটি হিসাবে দেখায়।

    উইন্ডোজে পাথ নির্দিষ্ট করার সময় খুব সাধারণ ত্রুটি: "C:\xampp\htdocs\"ভুল। আপনি প্রয়োজন "C:\\xampp\\htdocs\\"


18

অপ্রত্যাশিত (

খোলার বন্ধনী সাধারণত ভাষা রচনা যেমন if/ foreach/ for/ array/ অনুসরণ করে listবা গাণিতিক এক্সপ্রেশন শুরু করে। সেগুলি "strings"পূর্ববর্তী (), একাকী $এবং কিছু সাধারণ ঘোষণার প্রসঙ্গের পরে সিনথেটিকভাবে ভুল ।

  1. ফাংশন ঘোষণার পরামিতি

    এই ত্রুটির জন্য একটি বিরল ঘটনা ডিফল্ট ফাংশন পরামিতি হিসাবে এক্সপ্রেশনগুলি ব্যবহার করার চেষ্টা করছে । এটি পিএইচপি 7 তেও সমর্থিত নয়:

    function header_fallback($value, $expires = time() + 90000) {

    কোনও ফাংশন ঘোষণার পরামিতিগুলি কেবল আক্ষরিক মান বা ধ্রুবক প্রকাশ হতে পারে। ফাংশন আমন্ত্রণগুলির থেকে পৃথক, যেখানে আপনি নিখরচায় ব্যবহার করতে পারেন whatever(1+something()*2)ইত্যাদি

  2. শ্রেণীর সম্পত্তি খেলাপি

    শ্রেণীর সদস্য ঘোষণার জন্য একই জিনিস , যেখানে কেবল আক্ষরিক / ধ্রুবক মান অনুমোদিত হয়, প্রকাশ নয়:

    class xyz {                   
        var $default = get_config("xyz_default");

    কনস্ট্রাক্টর এ জাতীয় জিনিস রাখুন। আরও দেখুন পিএইচপি বৈশিষ্ট্যগুলি কেন ফাংশনগুলিকে অনুমতি দেয় না?

    আবার মনে রাখবেন যে পিএইচপি 7 কেবলমাত্র var $xy = 1 + 2 +3;সেখানে ধ্রুবক প্রকাশের অনুমতি দেয় ।

  3. পিএইচপি-তে জাভাস্ক্রিপ্ট সিনট্যাক্স

    জাভাস্ক্রিপ্ট বা jQuery সিনট্যাক্স ব্যবহার স্পষ্ট কারণে পিএইচপি তে কাজ করবে না:

    <?php      
        print $(document).text();

    যখন এটি ঘটে, এটি সাধারণত একটি নির্বিঘ্ন পূর্ববর্তী স্ট্রিং নির্দেশ করে; এবং আক্ষরিক <script>বিভাগগুলি পিএইচপি কোড প্রসঙ্গে ফাঁস হয়।

  4. isset (()), খালি, কী, পরবর্তী, বর্তমান

    উভয় isset()এবং empty()ভাষা অন্তর্নির্মিত, ফাংশন নয়। তাদের সরাসরি কোনও চলক অ্যাক্সেস করা দরকার । আপনি যদি অজান্তেই খুব বেশি জুড়ে বন্ধনীর জুড়ি যুক্ত করেন তবে আপনি তবে একটি অভিব্যক্তি তৈরি করতে চান:

              
    if (isset(($_GET["id"]))) {

    অন্তর্নিহিত ভেরিয়েবল নাম অ্যাক্সেসের জন্য যে কোনও ভাষা নির্মাণের ক্ষেত্রে এটি একই প্রযোজ্য। এই বিল্ট-ইনগুলি ভাষার ব্যাকরণের একটি অংশ, সুতরাং আলংকারিক অতিরিক্ত বন্ধনীগুলির অনুমতি দেবেন না।

    ব্যবহারকারী-স্তরের ফাংশনগুলির জন্য যা একটি পরিবর্তনশীল রেফারেন্সের প্রয়োজন - তবে একটি এক্সপ্রেশন ফলাফল পাস করে - পরিবর্তে রানটাইম ত্রুটির দিকে পরিচালিত করে।


অপ্রত্যাশিত )

  1. অনুপস্থিত ফাংশন প্যারামিটার

    আপনার কোনও ফাংশন কলে সর্বশেষে বিপথগামী কমা থাকতে পারে না । পিএইচপি সেখানে একটি মান আশা করে এবং এভাবে প্রাথমিকভাবে বন্ধ হওয়া )বন্ধনী সম্পর্কে অভিযোগ করে ।

                  
    callfunc(1, 2, );

    একটি পিছনে কমা কেবল অনুমোদিত array()বা list()নির্মাণের জন্য অনুমোদিত ।

  2. অসম্পূর্ণ প্রকাশ

    আপনি যদি গাণিতিক প্রকাশে কিছু ভুলে যান তবে পার্সারটি ছেড়ে দেয়। কারণ এটি কীভাবে সম্ভবত এটি ব্যাখ্যা করা উচিত:

                   
    $var = 2 * (1 + );

    এবং যদি আপনি )এমনকি সমাপ্তিটি ভুলে যান তবে তার পরিবর্তে আপনি অপ্রত্যাশিত সেমিকোলন সম্পর্কে অভিযোগ পেয়ে যাবেন।

  3. ফরচ হিসাবে constant

    নিয়ন্ত্রণ বিবৃতিতে ভেরিয়েবল $উপসর্গের জন্য আপনি দেখতে পাবেন:

                           
    foreach ($array as wrong) {

    এখানে পিএইচপি কখনও কখনও আপনাকে বলবে যে এটির ::পরিবর্তে প্রত্যাশিত । কারণ একটি শ্রেণি :: $ ভেরিয়েবলটি প্রত্যাশিত $ পরিবর্তনশীল ভাবটি সন্তুষ্ট করতে পারে ..


অপ্রত্যাশিত {

কোঁকড়া ধনুর্বন্ধনী {এবং }কোড ব্লক বন্ধ। এবং এগুলি সম্পর্কে বাক্য গঠন ত্রুটিগুলি সাধারণত কিছু ভুল বাসা বেঁধে দেয়।

  1. একটিতে তুলনামূলক subexpressions if

    সর্বাধিক সাধারণত ভারসাম্যহীন (এবং) কারণটি যদি পার্সার খোলার কোঁকড়াটি {খুব তাড়াতাড়ি প্রদর্শিত হওয়ার বিষয়ে অভিযোগ করে । একটি সহজ উদাহরণ:

                                  
    if (($x == $y) && (2 == true) {

    আপনার প্রথম বন্ধনী গণনা করুন বা একটি IDE ব্যবহার করুন যা এর সাথে সহায়তা করে। এছাড়াও কোনও স্থান ছাড়াই কোড লিখবেন না। পঠনযোগ্যতা গণনা।

  2. expression এবং expression এক্সপ্রেশন প্রসঙ্গে

    আপনি বাক্সে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারবেন না। আপনি যদি প্রথম বন্ধনী এবং কোঁকড়া গুলিকে বিভ্রান্ত করেন তবে এটি ভাষার ব্যাকরণ মেনে চলবে না:

               
    $var = 5 * {7 + $x};

    সনাক্তকারী নির্মাণের জন্য কয়েকটি ব্যতিক্রম রয়েছে যেমন স্থানীয় স্কোপ ভেরিয়েবল ${references}

  3. পরিবর্তনশীল ভেরিয়েবল বা কোঁকড়ানো var এক্সপ্রেশন

    এটি বেশ বিরল। তবে আপনি জটিল ভেরিয়েবল এক্সপ্রেশনগুলির জন্য অভিযোগগুলি পার্সার {এবং }পার্সার করতে পারেন :

                          
    print "Hello {$world[2{]} !";

    যদিও এই }জাতীয় প্রসঙ্গে একটি অপ্রত্যাশিত হওয়ার সম্ভাবনা বেশি ।


অপ্রত্যাশিত }

একটি "অপ্রত্যাশিত }" ত্রুটি পাওয়ার সময়, আপনি বেশিরভাগই খুব শীঘ্রই একটি কোড ব্লক বন্ধ করে দিয়েছেন।

  1. একটি কোড ব্লকের সর্বশেষ বিবৃতি

    এটি যে কোনও নির্বিঘ্ন প্রকাশের জন্য ঘটতে পারে।

    এবং যদি কোনও ফাংশন / কোড ব্লকের শেষ লাইনটিতে একটি পিছনের ;অর্ধকোলনের অভাব থাকে :

    function whatever() {
        doStuff()
    }            

    আপনি সম্ভবত এখনও + 25;ফাংশন ফলাফল বা অন্য কিছু যুক্ত করতে চেয়েছিলেন কিনা এখানে পার্সারটি বলতে পারবেন না ।

  2. অবৈধ ব্লক নেস্টিং / ভুলে গেছেন {

    }খুব শীঘ্রই কোনও কোড ব্লক বন্ধ হয়ে গেলে আপনি কখনও কখনও এই পার্সার ত্রুটি দেখতে পাবেন বা আপনি একটি উদ্বোধনটি ভুলে গেছেন {:

    function doStuff() {
        if (true)    
            print "yes";
        }
    }   

    উপরের স্নিপেটে ifখোলার {কোঁকড়া বন্ধনী ছিল না। এইভাবে }নীচের বন্ধটি নিরর্থক হয়ে উঠল। এবং তাই পরবর্তী }সমাপনীটি, যা ফাংশনটির উদ্দেশ্যে ছিল, মূল উদ্বোধনী {কোঁকড়া ধনুর্বন্ধকের সাথে সঙ্গত ছিল না ।

    এই জাতীয় ত্রুটিগুলি সঠিক কোড ইন্ডেন্টেশন ছাড়াই খুঁজে পাওয়া আরও শক্ত hard একটি আইডিই এবং বন্ধনী ম্যাচ ব্যবহার করুন।


অপ্রত্যাশিত {, প্রত্যাশা(

একটি ভাষা / ঘোষণার শিরোনাম এবং কোড ব্লকের প্রয়োজন এমন ভাষা নির্মাণগুলি এই ত্রুটিটিকে ট্রিগার করবে।

  1. পরামিতি তালিকা

    উদাহরণস্বরূপ প্যারামিটার তালিকা ব্যতীত ভুল বিবরণযুক্ত ফাংশনগুলির অনুমতি নেই:

                     
    function whatever {
    }
  2. বিবৃতি শর্ত নিয়ন্ত্রণ করুন

    এবং আপনার একইভাবে ifশর্ত ছাড়াই থাকতে পারে না ।

      
    if {
    }

    যা বোঝায় না, স্পষ্টতই। সাধারণ সন্দেহভাজনদের জন্য একই জিনিস, for/ foreach, while/ do, ইত্যাদি

    আপনি যদি এই বিশেষ ত্রুটিটি পেয়ে থাকেন তবে অবশ্যই কিছু ম্যানুয়াল উদাহরণগুলি সন্ধান করা উচিত।


1
এই পোস্টে আমার প্রশ্নের উত্তর খুঁজছিলেন, কিন্তু - "অপ্রত্যাশিত {" এর সমস্যাটির নিজের কাছে নিজের উত্তর খুঁজে পেয়েছি, এ কারণেই কেন আমি আমার উত্তরটি ভাগ করতে চেয়েছিলাম - আমার জন্য সমস্যাটি লাইন ব্রেকিং ছিল এনকোডিং - কোনওভাবে আমার কিছু ফাইলগুলি ম্যাকিনটোস লাইন ব্রেকগুলি ব্যবহার করছিল, তবে যখন আমি সেগুলি উইন্ডোজ লাইন ব্রেকগুলিতে পরিবর্তন করেছি - আমার সমস্যা (লোকালহোস্টে (ডাব্লুএএমএপি) সবকিছু কাজ করে, তবে লিনাক্স ওয়েবসারভার ডন্টে) সমাধান করা হয়েছিল।
এডগার্স আইভর্স

@ এডগার্সএইভার্স আপনার মন্তব্যের জন্য ধন্যবাদ! প্ল্যাটফর্ম-নির্দিষ্ট লাইনব্রেকস প্রকৃতপক্ষে একটি অস্বাভাবিক এবং কৌশলযুক্ত সমস্যা। আমি সম্ভবত এটি এখানে এখানে উল্লেখ করব। (এটি অন্যান্য রেফারেন্স উত্তরে ঠিক যেমনটি উল্লেখ করা হয়েছিল ))
মারিও

আমি দেখতে পেলাম যে অপ্রত্যাশিত হওয়া getting আমার কোডের এক টুকরা পিএইচপি শর্ট ট্যাগ ব্যবহার করার কারণে? <? পিএইচপি - এর পরিবর্তে - এটি অন্যান্য সার্ভারে যেমন কাজ করেছে তেমনি এটি পেতে আমাকে কিছুটা সময় নিয়েছে।
c7borg

14

অপ্রত্যাশিত $ শেষ

পিএইচপি যখন "অপ্রত্যাশিত $end" সম্পর্কে কথা বলে তখন এর অর্থ আপনার কোডটি অকাল থেকেই শেষ হয়ে যায়। (আক্ষরিকভাবে নেওয়ার সময় বার্তাটি কিছুটা বিভ্রান্তিমূলক It's এটি "$ এন্ড" নামের একটি পরিবর্তনশীল সম্পর্কে নয়, যেমনটি কখনও কখনও নতুনরাও ধরে নেন It এটি "ফাইলের শেষ", বোঝায় EOF))

কারণ: ভারসাম্যহীন {এবং }কোড ব্লক / এবং ফাংশন বা শ্রেণীর ঘোষণার জন্য।

এটা প্রায় কাছাকাছি সবসময় একটি অনুপস্থিত সম্পর্কে }পূর্ববর্তী কোড ব্লক বন্ধ করতে কোঁকড়া বক্রবন্ধনী।

  • আবার এ জাতীয় সমস্যা এড়াতে সঠিক ইন্ডেন্টেশন ব্যবহার করুন।

  • কোথায় }ভুল নেই তা জানতে ব্র্যাকেট মিলের সাথে একটি আইডিই ব্যবহার করুন । বেশিরভাগ আইডিই এবং পাঠ্য সম্পাদকগুলিতে কীবোর্ড শর্টকাট রয়েছে:

    • নেটবিয়ানস, পিএইচপিস্টোরম, কমডো: Ctrl[এবংCtrl]
    • গ্রহন, অপ্টানা: CtrlShiftP
    • পরমাণু, উত্সাহ: Ctrlm- জেন্ড স্টুডিওCtrlM
    • জ্যানি, নোটপ্যাড ++: CtrlB- জো: CtrlG- ইমাস: C-M-n- ভিম:%

বেশিরভাগ আইডিইগুলি ম্যাচিং বন্ধনী, বন্ধনী এবং বন্ধনীগুলি হাইলাইট করে । যা তাদের পারস্পরিক সম্পর্কটি পরিদর্শন করা বেশ সহজ করে তোলে:

একটি আইডিইতে বন্ধনী মিলছে

নিরবচ্ছিন্ন অভিব্যক্তি

এবং Unexpected $endসিনট্যাক্স / পার্সার ত্রুটিটি নিরবচ্ছিন্ন অভিব্যক্তি বা বিবৃতিগুলির জন্যও ঘটতে পারে:

  • $var = func(1, ?>EOF

সুতরাং, প্রথমে স্ক্রিপ্টগুলির শেষে দেখুন। যে ;কোনও পিএইচপি স্ক্রিপ্টের সর্বশেষ বিবৃতিটির জন্য প্রায়শই একটি পিছনে চলে আসা হয়। তবে আপনার একটা থাকা উচিত । অবিলম্বে কারণ এটি এ জাতীয় সিনট্যাক্স সমস্যাগুলিকে নীচে নামিয়েছে।

ইন্ডিডড হারডোক মার্কস

আর একটি সাধারণ ঘটনা HEREDOC বা NOWDOC স্ট্রিংয়ের সাথে উপস্থিত হয় । সমাপ্তি চিহ্নিতকারী নেতৃস্থানীয় স্পেস, ট্যাব ইত্যাদির সাথে অগ্রাহ্য হয় .:

print <<< END
    Content...
    Content....
  END;
# ↑ terminator isn't exactly at the line start

সুতরাং পার্সার HEREDOC স্ট্রিংটি ফাইলের শেষ অবধি অবিরত ধরে রাখবে (অতএব "অপ্রত্যাশিত $ শেষ")। খুব সুন্দর সমস্ত আইডিই এবং সিনট্যাক্স-হাইলাইটিং এডিটররা এটিকে স্পষ্ট করে তুলবে বা এ সম্পর্কে সতর্ক করবে।

পালানো উদ্ধৃতি চিহ্নগুলি marks

আপনি যদি \কোনও স্ট্রিং ব্যবহার করেন তবে এর একটি বিশেষ অর্থ রয়েছে। একে " এস্কেপ চরিত্র " বলা হয় এবং সাধারণত পার্সারকে পরবর্তী অক্ষরটি আক্ষরিকভাবে নিতে বলে।

উদাহরণ: echo 'Jim said \'Hello\'';মুদ্রণ করবেJim said 'hello'

যদি আপনি কোনও স্ট্রিংয়ের সমাপ্তি উদ্ধৃতিটি থেকে অব্যাহতি পান তবে সমাপনী উদ্ধৃতিটি আক্ষরিকভাবে নেওয়া হবে এবং উদ্দেশ্য হিসাবে নয়, অর্থাত্ স্ট্রিংয়ের অংশ হিসাবে একটি মুদ্রণযোগ্য উদ্ধৃতি হিসাবে এবং স্ট্রিংটি বন্ধ না করে। এটি আপনি পরবর্তী স্ট্রিংটি খোলার পরে বা স্ক্রিপ্টের শেষে সাধারণত পার্স ত্রুটি হিসাবে দেখায়।

উইন্ডোজে পাথ নির্দিষ্ট করার সময় খুব সাধারণ ত্রুটি: "C:\xampp\htdocs\"ভুল। আপনি প্রয়োজন "C:\\xampp\\htdocs\\"

বিকল্প বাক্য গঠন

টেমপ্লেটগুলিতে বিবৃতি / কোড ব্লকের বিকল্প সিনট্যাক্স ব্যবহার করার সময় আপনি এই সিনট্যাক্স ত্রুটিটি কিছুটা বিরল দেখতে পাচ্ছেন। উদাহরণস্বরূপ ব্যবহার if:এবং else:একটি অনুপস্থিত endif;

আরো দেখুন:


14

অপ্রত্যাশিত T_IF
অপ্রত্যাশিত T_ELSEIF
অপ্রত্যাশিত T_ELSE
অপ্রত্যাশিত T_ENDIF

শর্তসাপেক্ষ নিয়ন্ত্রণ ব্লক if, elseifএবং elseএকটি সহজ গঠন অনুসরণ করুন। আপনি যখন একটি সিনট্যাক্স ত্রুটির মুখোমুখি হন, তখন সম্ভবত এটি অবৈধ ব্লক নেস্টিং missing অনুপস্থিত {কোঁকড়া ধনুর্বন্ধনী সহ }- বা একটি খুব বেশি।

এখানে চিত্র বর্ণনা লিখুন

  1. অনুপস্থিত {বা }ভুল ইন্ডেন্টেশনের কারণে

    ম্যাচযুক্ত কোড ধনুর্বন্ধনী কম ভাল ফর্ম্যাট কোড যেমন সাধারণ:

    if((!($opt["uniQartz5.8"]!=$this->check58)) or (empty($_POST['poree']))) {if
    ($true) {echo"halp";} elseif((!$z)or%b){excSmthng(False,5.8)}elseif (False){

    যদি আপনার কোডটি দেখতে এমন হয় তবে নতুন করে শুরু করুন! অন্যথায় এটি আপনার বা অন্য কারও কাছে উপযুক্ত নয়। সাহায্যের জন্য অনুসন্ধান করার জন্য এটি ইন্টারনেটে এটি প্রদর্শন করার কোনও অর্থ নেই।

    আপনি শুধুমাত্র এটা ঠিক করতে সক্ষম হবে, যদি আপনি চাক্ষুষরূপে নেস্টেড গঠন এবং যদি / অন্যথায় কন্ডিশন ও তাদের সম্পর্ক অনুসরণ করতে পারেন {কোড ব্লক }। তারা সব জুটিবদ্ধ কিনা তা দেখতে আপনার আইডিই ব্যবহার করুন।

    if (true) {
         if (false) {
                  
         }
         elseif ($whatever) {
             if ($something2) {
                 
             } 
             else {
                 
             }
         }
         else {
             
         }
         if (false) {    //   a second `if` tree
             
         }
         else {
             
         }
    }
    elseif (false) {
        
    }

    যে কোনও ডাবল } }কেবল একটি শাখা বন্ধ করবে না, তবে পূর্ববর্তী শর্তের কাঠামো। অতএব একটি কোডিং শৈলী সঙ্গে লাঠি; যদি / অন্য গাছগুলিতে নেস্ট করে মিশে না যায় তবে মিলবে না।

    এখানে ধারাবাহিকতা ছাড়াও, এটি দীর্ঘতর পরিস্থিতি এড়াতে সহায়ক হয়ে ওঠে। ifঅপঠনযোগ্য-এক্সপ্রেশনগুলি এড়াতে অস্থায়ী পরিবর্তনশীল বা ফাংশন ব্যবহার করুন ।

  2. IF এক্সপ্রেশন ব্যবহার করা যাবে না

    একটি আশ্চর্যজনকভাবে ঘন ঘন আগত আগত ভুল ifএকটি অভিব্যক্তিতে একটি বিবৃতি যেমন মুদ্রণ বিবৃতি হিসাবে ব্যবহার করার চেষ্টা করে :

                       
    echo "<a href='" . if ($link == "example.org") { echo 

    যা অবশ্যই অবৈধ।

    আপনি একটি ত্রিবার্ষিক শর্তসাপেক্ষ ব্যবহার করতে পারেন , তবে পঠনযোগ্যতার প্রভাবগুলি থেকে সাবধান থাকুন।

    echo "<a href='" . ($link ? "http://yes" : "http://no") . "</a>";

    অন্যথায় এই ধরনের আউটপুট কনস্ট্রাক্টস ব্রেক করুন: একাধিক ifগুলি এবং echoগুলি ব্যবহার করুন ।
    আরও ভাল, অস্থায়ী ভেরিয়েবলগুলি ব্যবহার করুন এবং আপনার শর্তাবলীর আগে রাখুন:

    if ($link) { $href = "yes"; } else { $href = "no"; }
    echo "<a href='$href'>Link</a>";

    এই ধরনের ক্ষেত্রে ফাংশন বা পদ্ধতিগুলি সংজ্ঞায়িত করা প্রায়শই বোধগম্য হয়।

    কন্ট্রোল ব্লকগুলি "ফলাফল" ফিরিয়ে দেয় না

    এখন এটি খুব কম সাধারণ, তবে কয়েক কোডার এমনকি এমন আচরণ করার চেষ্টা করে ifযেন এটি কোনও ফলাফল ফিরে আসতে পারে :

    $var = if ($x == $y) { "true" };

    যা ifস্ট্রিং কনটেনটেশন / এক্সপ্রেশনের মধ্যে কাঠামোগতভাবে অভিন্ন ।

    • তবে নিয়ন্ত্রণ কাঠামোর (যদি / অগ্রণী / সময়) এর কোনও "ফলাফল" থাকে না
    • আক্ষরিক স্ট্রিং "সত্য" এছাড়াও কেবল একটি অকার্যকর স্টেটমেন্ট হবে।

    কোড ব্লকে আপনাকে একটি অ্যাসাইনমেন্ট ব্যবহার করতে হবে :

    if ($x == $y) { $var = "true"; }

    বিকল্পভাবে, একটি ?:ত্রৈমাসিক তুলনা অবলম্বন করুন ।

    যদি হয়

    শর্তের মধ্যে আপনি বাসা বাঁধতে পারবেন নাif :

                        
    if ($x == true and (if $y != false)) { ... }

    যা স্পষ্টতই অপ্রয়োজনীয়, কারণ and(বা or) ইতিমধ্যে শৃঙ্খলা তুলনা করার অনুমতি দেয়।

  3. ভুলে যাওয়া ;সেমিকোলনস

    আরও একবার: প্রতিটি নিয়ন্ত্রণ ব্লকের একটি বিবৃতি হওয়া দরকার। যদি আগের কোড পিসটি সেমিকোলন দিয়ে শেষ না করা হয়, তবে এটি একটি গ্যারান্টিযুক্ত সিনট্যাক্স ত্রুটি:

                    
    $var = 1 + 2 + 3
    if (true) {  }

    বিটিডব্লিউ, একটি {…}কোড ব্লকের শেষ লাইনের জন্য একটি সেমিকোলনও প্রয়োজন।

  4. সেমিকোলন খুব তাড়াতাড়ি

    এখন কোনও নির্দিষ্ট কোডিং শৈলীর জন্য দোষ দেওয়া সম্ভবত ভুল, কারণ এই ক্ষতিটিকে উপেক্ষা করা খুব সহজ:

                
    if ($x == 5);
    {
        $y = 7;
    }
    else           
    {
        $x = -1;    
    }

    যা আপনি কল্পনাও করতে পারেন তার চেয়ে প্রায়শই ঘটে।

    • আপনি যখন এর সাথে অভিব্যক্তিটি সমাপ্ত করবেনif (); তখন একটি শূন্য বিবৃতি কার্যকর করবে। ;একটি খালি হয়ে {}তার নিজস্ব!
    • {…}ব্লক এইভাবে থেকে বিচু্যত হয় if, এবং সবসময় চালানো হবে।
    • সুতরাং elseআর একটি খোলা ifনির্মাণের সাথে আর সম্পর্ক ছিল না , এ কারণেই এটি অপ্রত্যাশিত T_ELSE সিনট্যাক্স ত্রুটির দিকে পরিচালিত করবে।

    যা এই সিনট্যাক্স ত্রুটির অনুরূপ সূক্ষ্ম পরিবর্তনের ব্যাখ্যা দেয়:

    if ($x) { x_is_true(); }; else { something_else(); };

    কোথায় ;কোড পর ব্লক {…}পুরো বন্ধ if , কনস্ট্রাক্ট ছিন্ন elseচিহ্নগুলি সিন্টেক্সের শাখা।

  5. কোড ব্লক ব্যবহার করা হচ্ছে না

    এটি সিনট্যাকটিক্যালি / / শাখায় কোড ব্লকের জন্য কোঁকড়া ধনুর্বন্ধনী {... বাদ দিতে মঞ্জুরিপ্রাপ্ত । যা দুঃখজনকভাবে একটি সিনট্যাক্স শৈলী যা বিপরীত কোডারদের কাছে খুব সাধারণ। (মিথ্যা অনুমানের অধীনে এটি টাইপ করা বা পড়ার পক্ষে দ্রুত ছিল)।}ifelseifelse

    তবে সিনট্যাক্সটি ট্রিপ করার সম্ভাবনা খুব বেশি। শীঘ্রই বা পরে অতিরিক্ত বিবৃতিগুলি যদি / অন্য শাখাগুলিতে প্রবেশ করতে পারে তবে:

    if (true)
        $x = 5;
    elseif (false)
        $x = 6;
        $y = 7;     
    else
        $z = 0;

    কিন্তু আসলে কোড ব্লক ব্যবহার করতে আপনাকে লিখতে হবে {... }সেগুলি যেমন!

    এমনকি পাকা প্রোগ্রামাররা এই ব্রেসলেস সিনট্যাক্স এড়িয়ে চলেন বা কমপক্ষে একে নিয়মের ব্যতিক্রমী ব্যতিক্রম হিসাবে বুঝতে পারেন।

  6. অন্যথায় / অন্যক্রমে ক্রমে এলসিফ

    নিজেকে মনে করিয়ে দেওয়ার একটি বিষয় অবশ্যই শর্তাধীন আদেশ

    if ($a) {  }
    else {  }
    elseif ($b) {  }
    

    আপনি elseifযতটা চান আপনার থাকতে পারেন তবে elseশেষ পর্যন্ত যেতে হবে । এটা ঠিক কিভাবে।

  7. শ্রেণির ঘোষণা

    উপরে উল্লিখিত হিসাবে , আপনার কোনও শ্রেণীর ঘোষণায় নিয়ন্ত্রণ বিবৃতি থাকতে পারে না:

    class xyz {
        if (true) {
            function ($var) {}
        }

    আপনি হয় একটি ফাংশন সংজ্ঞা ভুলে গেছেন , বা }এই ক্ষেত্রে খুব তাড়াতাড়ি একটি বন্ধ করে দিয়েছেন ।

  8. অপ্রত্যাশিত T_ELSEIF / T_ELSE

    পিএইচপি এবং এইচটিএমএল মিশ্রিত করার সময়, একটির }জন্য বন্ধটি if/elseifঅবশ্যই <?php ?>পরবর্তী পিএইচপি ব্লকে থাকা উচিত elseif/else। এটিগুলির অংশ হওয়ার }জন্য বন্ধ হওয়ার কারণে এটি একটি ত্রুটি তৈরি করবে :ifelseif

    <?php if ($x) { ?>
        html
    <?php } ?>
    <?php elseif ($y) { ?>
        html
    <?php } ?>

    সঠিক ফর্ম <?php } elseif:

    <?php if ($x) { ?>
        html
    <?php } elseif ($y) { ?>
        html
    <?php } ?>

    এটি কমবেশি ভুল ইনডেন্টেশনের একটি প্রকরণ - সম্ভবত প্রায়শই ভুল কোডিং উদ্দেশ্যগুলির উপর ভিত্তি করে।
    আপনি অভ্যন্তরীণ এবং / কাঠামোগত টোকেনগুলিতে অন্যান্য বিবৃতি ম্যাস করতে পারবেন না :ifelseifelse

    if (true) {
    }
    echo "in between";    
    elseif (false) {
    }
    ?> text <?php      
    else {
    }

    হয় কেবল {…}কোড ব্লকগুলিতেই ঘটতে পারে , নিয়ন্ত্রণ কাঠামো টোকেনগুলির মধ্যে নয়।

    • এটি কোনওভাবেই বোঝা যাবে না। এটি এমন নয় যে পিএইচপি ifএবং elseশাখাগুলির মধ্যে লাফ দেয় যখন কিছু "অপরিজ্ঞাত" অবস্থা ছিল ।
    • আপনার মন তৈরি করতে হবে যেখানে মুদ্রণ বিবৃতিগুলি / অথবা যদি তাদের উভয় শাখায় পুনরাবৃত্তি করা দরকার।

    বা আপনি যদি অন্য নিয়ন্ত্রণ স্ট্রাকচারের মধ্যে / অন্য কোনও অংশ করতে পারেন :

    foreach ($array as $i) {
        if ($i) {  }
    }
    else {  }

    সেখানে নেই অন্বিত সম্পর্ক মধ্যে ifএবং elseforeachএ আভিধানিক সুযোগ প্রান্ত }, তাই কোন বিন্দু ifঅব্যাহত রাখার জন্য কাঠামো।

  9. T_ENDIF

    একটি অপ্রত্যাশিত T_ENDIF অভিযোগ হলে, আপনি বিকল্প বাক্য গঠন শৈলী ব্যবহার করছেন if:elseif:else:endif;। যা আপনার সম্পর্কে সত্যিকার অর্থে দুবার চিন্তা করা উচিত।

    • একটি সাধারণ ফাঁদ eerily বিভ্রান্তিকর অনুরূপ :একটি জন্য কোলন ;সেমিকোলন । ("সেমিকোলনে খুব তাড়াতাড়ি আচ্ছাদিত")

    • যেহেতু টেমপ্লেট ফাইলগুলিতে অন্বেষণ করা শক্ত, তাই বিকল্প সিনট্যাক্স ব্যবহার করার সময় - এটি প্রশংসনীয় যে আপনার কোনওটির সাথে endif;মেলে না if:

    • ব্যবহার } endif; করা একটি দ্বিগুণ- if নির্ধারক।

    একটি "অপ্রত্যাশিত $ প্রান্ত" হ'ল সাধারণত ভুলে যাওয়া }ক্লোরিং বক্রবন্ধনী দাম is

  10. অ্যাসাইনমেন্ট বনাম তুলনা

    সুতরাং, এটি একটি সিনট্যাক্স ত্রুটি নয়, তবে এই প্রসঙ্গে উল্লেখ করার মতো:

           
    if ($x = true) { }
    else { do_false(); }

    এটি কোনও ==/ ===তুলনা নয়, তবে একটি =অ্যাসাইনমেন্ট । এটি বরং সূক্ষ্ম, এবং সহজেই কিছু ব্যবহারকারীর অসহায়ভাবে পুরো শর্তের ব্লকগুলি সম্পাদনা করতে পারে। প্রথমে অনিচ্ছাকৃত কার্যভারগুলি সন্ধান করুন - যখনই আপনি কোনও যুক্তিযুক্ত ত্রুটি / দুর্ব্যবহারের অভিজ্ঞতা পান।


11

অপ্রত্যাশিত T_IS_EQUAL
অপ্রত্যাশিত T_IS_GREATER_OR_EQUAL
অপ্রত্যাশিত T_IS_IDENTICAL
অপ্রত্যাশিত T_IS_NOT_EQUAL
অপ্রত্যাশিত T_IS_NOT_IDENTICAL
অপ্রত্যাশিত T_IS_SMALLER_OR_EQUAL
অপ্রত্যাশিত <
অপ্রত্যাশিত>

যেমন তুলনা অপারেটরদের ==, >=, ===, !=, <>, !==এবং <=অথবা <এবং >বেশিরভাগই শুধু এক্সপ্রেশন, এই ধরনের হিসাবে ব্যবহার করা উচিত ifএক্সপ্রেশন। যদি পার্সার তাদের সম্পর্কে অভিযোগ করে, তবে এর অর্থ প্রায়শই ( )তাদের চারপাশে ভুল পার্ভিং বা মিল নেই pare

  1. পারেনস গ্রুপিং

    বিশেষত ifএকাধিক তুলনা সহ বিবৃতিগুলির জন্য আপনাকে অবশ্যই খোলার এবং বন্ধ হওয়া বন্ধনীকে সঠিকভাবে গণনা করতে হবে :

                            
    if (($foo < 7) && $bar) > 5 || $baz < 9) { ... }
                          

    এখানে ifশর্তটি ইতিমধ্যে দ্বারা বন্ধ হয়ে গিয়েছিল)

    আপনার তুলনাগুলি পর্যাপ্ত জটিল হয়ে উঠলে এটি প্রায়শই ifবরং একাধিক এবং নেস্টেড কনস্ট্রাক্টগুলিতে বিভক্ত হয় ।

  2. isset () তুলনা সঙ্গে কাটা

    একটি সাধারণ আগত ব্যক্তি পিটফাল একত্রিত করার isset()বা empty()তুলনা করার চেষ্টা করছে :

                            
    if (empty($_POST["var"] == 1)) {

    অথবা এমনকি:

                        
    if (isset($variable !== "value")) {

    এটি পিএইচপি-এর অর্থবোধ করে না, কারণ issetএবং emptyভাষা রচনাগুলি যা কেবলমাত্র পরিবর্তনশীল নামগুলি গ্রহণ করে। ফলাফলের সাথে তুলনা করাও বোধগম্য নয়, কারণ আউটপুট কেবল / ইতিমধ্যে একটি বুলিয়ান।

  3. অ্যারে অপারেটরের >=সাথে বৃহত্তর বা সমানকে বিভ্রান্ত করছে=>

    উভয় অপারেটর কিছুটা অনুরূপ দেখায়, তাই তারা কখনও কখনও মিশে যায়:

             
    if ($var => 5) { ... }

    আপনার কেবলমাত্র মনে রাখতে হবে যে এই তুলনা অপারেটরটিকে এটি সঠিকভাবে পেতে " বৃহত্তর বা সমান " বলা হয়।

    আরও দেখুন: যদি পিএইচপি-তে বিবৃতি কাঠামো থাকে

  4. তুলনা করার মতো কিছুই নেই

    যদি তারা দুটি একই তুলনামূলক নামের সাথে স্বতন্ত্র হয় তবে আপনি দুটি তুলনাও একত্র করতে পারবেন না:

                     
    if ($xyz > 5 and < 100)

    পিএইচপি আপনাকে প্রাথমিক ভেরিয়েবলটি আবার তুলনা করতে বোঝাতে পারে না। অপারেটর অগ্রাধিকার অনুসারে এক্সপ্রেশনগুলি সাধারণত যুক্ত হয় , সুতরাং যতক্ষণ না <দেখা যায় ততক্ষণে আসল ভেরিয়েবল থেকে কেবলমাত্র বুলিয়ান ফলাফল থাকতে পারে।

    আরও দেখুন: অপ্রত্যাশিত T_IS_SMALLER_OR_EQUAL

  5. তুলনা শৃঙ্খলা

    অপারেটরের সারি দিয়ে আপনি কোনও ভেরিয়েবলের সাথে তুলনা করতে পারবেন না:

                      
     $reult = (5 < $x < 10);

    এটি দুটি তুলনা বিভক্ত করতে হবে, প্রতিটি বিপরীতে $x

    এটি আসলে কালো তালিকাভুক্ত এক্সপ্রেশনগুলির সমতুল্য (সমতুল্য অপারেটর সহযোগীতার কারণে)। এটি কয়েকটি সি-স্টাইল ভাষায় সিন্টেক্সিকভাবে বৈধ, তবে পিএইচপি এটি প্রত্যাশিত তুলনা শৃঙ্খলা হিসাবে ব্যাখ্যা করবে না।

  6. অপ্রত্যাশিত >
    অপ্রত্যাশিত<

    অপারেটরের চেয়ে বড় >বা তার চেয়ে কম <কাস্টম T_XXXটোকেনাইজারের নাম নেই। এবং অন্যদের মতো এগুলিও ভুল জায়গায় প্রতিস্থাপন করা যেতে পারে, আপনি প্রায়শই দেখেন যে পার্সার তাদের সম্পর্কে ভুল বর্ণিত স্ট্রিং এবং ছাঁটা এইচটিএমএল অভিযোগ করে:

                            
    print "<a href='z">Hello</a>";
                     ↑

    একটি স্ট্রিং এই পরিমাণে "<a href='z"তুলনা করা হচ্ছে >একটি আক্ষরিক ধ্রুবক থেকে Helloএবং তারপর অন্য <তুলনা। অথবা এটি পিএইচপি কমপক্ষে কীভাবে তা দেখে। আসল কারণ এবং বাক্য গঠন ভুল ছিল অকাল স্ট্রিং "সমাপ্তি।

    পিএইচপি শুরুর ট্যাগগুলিতে বাসা বাঁধাই সম্ভব নয়:

    <?php echo <?php my_func(); ?>

আরো দেখুন:


11

অপ্রত্যাশিত T_IF
অপ্রত্যাশিত T_Foreach
অপ্রত্যাশিত T_FOR
অপ্রত্যাশিত T_WHILE
অপ্রত্যাশিত T_DO
অপ্রত্যাশিত T_ECHO

কন্ট্রোল নির্মান যেমন if, foreach, for, while, list, global, return, do, print, echoশুধুমাত্র বিবৃতিগুলির মতো ব্যবহৃত হতে পারে। এগুলি সাধারণত নিজেরাই একটি লাইনে থাকে।

  1. সেমিকোলন; তুমি কোথায়?

    পার্সার যদি কোনও নিয়ন্ত্রণ বিবৃতি সম্পর্কে অভিযোগ করে থাকে তবে সর্বজনীনভাবে আপনি পূর্ববর্তী লাইনে একটি সেমিকোলনটি মিস করেছেন:

                 
    $x = myfunc()
    if (true) {

    সমাধান: পূর্ববর্তী লাইনে তাকান; সেমিকোলন যোগ করুন।

  2. শ্রেণির ঘোষণা

    আর একটি অবস্থান যেখানে এটি ঘটে সেগুলি শ্রেণির ঘোষণায় । শ্রেণি বিভাগে আপনি কেবল সম্পত্তি সূচনা এবং পদ্ধতি বিভাগগুলি তালিকাভুক্ত করতে পারেন। কোনও কোড সেখানে থাকতে পারে না।

    class xyz {
        if (true) {}
        foreach ($var) {}

    এ জাতীয় সিনট্যাক্স ত্রুটিগুলি সাধারণত ভুলভাবে নেস্টেড {এবং }। বিশেষত যখন ফাংশন কোড ব্লকগুলি খুব তাড়াতাড়ি বন্ধ হয়ে যায়।

  3. অভিব্যক্তি প্রসঙ্গে বিবৃতি

    বেশিরভাগ ভাষার নির্মাণগুলি কেবলমাত্র বিবৃতি হিসাবে ব্যবহার করা যেতে পারে । এগুলিকে অন্য অভিব্যক্তির ভিতরে রাখা বোঝানো হয় না:

                       
    $var = array(1, 2, foreach($else as $_), 5, 6);

    তেমনিভাবে ifআপনি স্ট্রিং, ম্যাথ এক্সপ্রেশন বা অন্য কোথাও একটি ব্যবহার করতে পারবেন না :

                   
    print "Oh, " . if (true) { "you!" } . " won't work";
    // Use a ternary condition here instead, when versed enough.

    ifবিশেষত একটি অভিব্যক্তিতে এম্বেড করার মতো শর্তগুলির জন্য, আপনি প্রায়শই একটি ?:ত্রৈমাসিক মূল্যায়ন ব্যবহার করতে চান ।

    একই ক্ষেত্রে প্রযোজ্য for, while, global, echoএবং একটি ক্ষুদ্রতর প্রসারিত list

              
    echo 123, echo 567, "huh?";

    যেখানে print()অন্তর্নিহিত একটি ভাষা যা প্রকাশের প্রসঙ্গে ব্যবহার করা যেতে পারে। (তবে খুব কমই বোঝা যায়))

  4. সনাক্তকারী হিসাবে সংরক্ষিত কীওয়ার্ড

    আপনি ব্যবহারকারীর সংজ্ঞায়িত ফাংশন বা শ্রেণীর নামগুলির জন্য doবা ifঅন্যান্য ভাষা ব্যবহার বা ব্যবহার করতে পারবেন না । (সম্ভবত পিএইচপি in. এ তবে তারপরেও এটি পরামর্শ দেওয়া হবে না))


7

অপ্রত্যাশিত '?'

আপনি যদি ??পিএইচপি 7 এর পূর্বে পিএইচপি এর কোনও সংস্করণে নাল কোলেসিং অপারেটরটি ব্যবহার করার চেষ্টা করছেন তবে আপনি এই ত্রুটিটি পাবেন।

<?= $a ?? 2; // works in PHP 7+
<?= (!empty($a)) ? $a : 2; // All versions of PHP

অপ্রত্যাশিত '?', ভেরিয়েবলের প্রত্যাশা

একই ধরণের ত্রুটি নালামজাতীয় ধরণের ক্ষেত্রে দেখা দিতে পারে যেমন:

function add(?int $sum): ?int {

যা আবার পুরানো পিএইচপি সংস্করণটি ব্যবহৃত হচ্ছে (সিএলআই সংস্করণ php -vবা ওয়েবসার্ভারের একটিতে আবদ্ধ হয় phpinfo();) নির্দেশ করে।


5

অপ্রত্যাশিত T_LNUMBER

টোকেনটি T_LNUMBERএকটি "দীর্ঘ" / সংখ্যা বোঝায়।

  1. অবৈধ ভেরিয়েবলের নাম

    পিএইচপি, এবং বেশিরভাগ অন্যান্য প্রোগ্রামিং ভাষায়, ভেরিয়েবলগুলি একটি সংখ্যা দিয়ে শুরু করতে পারে না। প্রথম অক্ষরটি বর্ণমালা বা আন্ডারস্কোর হতে হবে।

    $1   // Bad
    $_1  // Good

    *

    • প্রায়ই আসে আপ ব্যবহার করার জন্য preg_replace-placeholders "$1"পিএইচপি প্রেক্ষাপটে:

      #                         ↓            ⇓  ↓
      preg_replace("/#(\w+)/e",  strtopupper($1) )

      যেখানে কলব্যাকটি উদ্ধৃত করা উচিত ছিল। (এখন /eরেজেক্স পতাকাটি হ্রাস করা হয়েছে But তবে কখনও কখনও এটি এখনও কার্যক্রমে অপব্যবহার করা হয় preg_replace_callback))

    • একই সনাক্তকারী সীমাবদ্ধতা অবজেক্ট প্রোপার্টি , বিটিডব্লুতে প্রযোজ্য ।

             
      $json->0->value
    • টোকনাইজার / পার্সার যখন আক্ষরিককে $1চলক নাম হিসাবে অনুমতি দেয় না তবে কেউ ব্যবহার করতে পারে${1} বা ${"1"}। যা অ-মানক শনাক্তকারীদের জন্য একটি সিনট্যাক্টিক কাজ ound (এটিকে স্থানীয় স্কোপ লুকোচুরি হিসাবে ভাবা ভাল But তবে সাধারণত: এই জাতীয় ক্ষেত্রে সাদামাটা অ্যারে পছন্দ করুন!)

    • মজাদারভাবে, তবে খুব বেশি প্রস্তাব দেওয়া হয়নি, পিএইচপি পার্সার ইউনিকোড-শনাক্তকারীদের অনুমতি দেয়; যেমন $➊বৈধ হবে। (আক্ষরিক মত নয় 1)।

  2. স্ট্রে অ্যারে এন্ট্রি

    অ্যারে ঘোষণার জন্য একটি অপ্রত্যাশিত দীর্ঘও ঘটতে পারে - যখন ,কমা নিখোঁজ হয় :

    #            ↓ ↓
    $xy = array(1 2 3);

    বা তেমনিভাবে ফাংশন কল এবং ঘোষণা এবং অন্যান্য নির্মাণ:

    • func(1, 2 3);
    • function xy($z 2);
    • for ($i=2 3<$z)

    সুতরাং সাধারণত তালিকা বা এক্সপ্রেশন পৃথক করার জন্য একটি ;বা ,অনুপস্থিত।

  3. ভুল এইচটিএমএল

    এবং আবারও, ভুল জিজ্ঞাসিত স্ট্রিংগুলি বিপথগামী সংখ্যার ঘন উত্স:

    #                 ↓ ↓          
    echo "<td colspan="3">something bad</td>";

    এই জাতীয় কেসগুলি অপ্রত্যাশিত T_STRING ত্রুটির মতো কম-বেশি চিকিত্সা করা উচিত ।

  4. অন্যান্য সনাক্তকারী

    ফাংশন, শ্রেণি বা নেমস্পেসের নাম হিসাবে শুরু করে নাম্বার দেওয়া যাবে না:

             
    function 123shop() {

    ভেরিয়েবল নামের মতো অনেকগুলি একই।


2

অপ্রত্যাশিত '='

চলক নামে অবৈধ অক্ষর থাকার কারণে এটি হতে পারে। ভেরিয়েবলের নামগুলি অবশ্যই এই নিয়মগুলি অনুসরণ করবে:

পরিবর্তনশীল নামগুলি পিএইচপি-র অন্যান্য লেবেলের মতো একই নিয়ম অনুসরণ করে। একটি বৈধ ভেরিয়েবলের নাম কোনও অক্ষর বা আন্ডারস্কোর দিয়ে শুরু হয়, তার পরে যেকোন সংখ্যক অক্ষর, সংখ্যা বা আন্ডারস্কোর হয়। একটি নিয়মিত প্রকাশ হিসাবে, এটি এভাবে প্রকাশ করা হবে: '[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'


ভাল সংযোজন জন।
ফান্ক চল্লিশ নিনার

1

অপ্রত্যাশিত 'চালিয়ে যান' (T_CONTINUE)

continueএটি একটি বিবৃতি (যেমন, বা হিসাবে) এবং একক উপস্থিত হতে হবে। এটি প্রকাশের অংশ হিসাবে ব্যবহার করা যায় না cannot আংশিকভাবে কারণ চালিয়ে যাওয়া কোনও মান ফেরায় না, তবে একটি অভিব্যক্তিতে প্রতিটি উপ-এক্সপ্রেশনটির অবশ্যই কিছু মান হওয়া উচিত যাতে সামগ্রিক অভিব্যক্তিটির কোনও মান হয় in এটি একটি বিবৃতি এবং একটি এক্সপ্রেশন মধ্যে পার্থক্য।

এর অর্থ continueকোনও ত্রৈমাসিক বিবৃতি বা কোনও বিবৃতিতে ব্যবহার করা যাবে না যার জন্য ফেরতের মান প্রয়োজন।

অপ্রত্যাশিত 'বিরতি' (T_BREAK)

break;অবশ্যই অবশ্যই যায় । এটি প্রকাশের প্রসঙ্গেও ব্যবহারযোগ্য নয়, তবে একটি কঠোর বিবৃতি (একই স্তরের foreachবা কোনও ifব্লকের)।

অপ্রত্যাশিত 'রিটার্ন' (T_RETURN)

এখন এটি আরও আশ্চর্যজনক হতে পারে returnতবে এটি কেবল একটি ব্লক-স্তরের বিবৃতি । এটি উচ্চতর স্কোপ / ফাংশনে কোনও মান (বা NULL) ফেরত দেয় তবে এটি নিজেই প্রকাশ হিসাবে মূল্যায়ন করে না। । এটি: করার কোনও লাভ নেইreturn(return(false);;


1

অপ্রত্যাশিত '।'

আপনি যদি পিএইচপি-র অসমর্থিত সংস্করণে স্প্ল্যাট অপারেটর ( ...) ব্যবহার করার চেষ্টা করছেন তবে এটি ঘটতে পারে ।

... কোনও ক্রিয়াকলাপে চলক সংখ্যক আর্গুমেন্ট ক্যাপচার করতে প্রথমে পিএইচপি 5.6 এ উপলব্ধ হয়ে উঠেছে:

function concatenate($transform, ...$strings) {
    $string = '';
    foreach($strings as $piece) {
        $string .= $piece;
    }
    return($transform($string));
}

echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples");
// This would print:
// I'D LIKE 6 APPLES

পিএইচপি 7.4 এ, আপনি এটি অ্যারে এক্সপ্রেশনগুলির জন্য ব্যবহার করতে পারেন ।

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

0

অপ্রত্যাশিত 'শেষ অবধি' (T_ENDWHILE)

সিনট্যাক্সটি কোলন ব্যবহার করছে - কোন কোলন না থাকলে উপরের ত্রুটি ঘটবে।

<?php while($query->fetch()): ?>
 ....
<?php endwhile; ?>

এই বাক্য গঠনটির বিকল্পটি কোঁকড়ানো বন্ধনী ব্যবহার করছে:

<?php while($query->fetch()) { ?>
  ....
<?php } ?>

http://php.net/manual/en/control-structures.while.php


0

একটি ত্রুটির বার্তা যে শুরু Parse error: syntax error, unexpected ':'ভুল করে একটি বর্গ স্ট্যাটিক রেফারেন্স লেখা কারণেও হতে পারে Class::$Variableযেমন Class:$Variable

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