পিএইচপি এর লুকানো বৈশিষ্ট্য? [বন্ধ]


174

আমি জানি এটি একটি পয়েন্ট-বেশ্যা প্রশ্নের মতো শোনায় তবে আমি কোথা থেকে আসছি তা আমাকে ব্যাখ্যা করতে দিন।

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

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

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

এখন আমার পিএইচপি বনাম সি # বিতর্ক শুরু করার কোনও ইচ্ছা নেই, বরং আমি যা বলতে চাইছি তা হ'ল আমি নিশ্চিত এমন কিছু পিএইচপি বৈশিষ্ট্য রয়েছে যা সম্পর্কে আমি জানিনা বা সঠিকভাবে ব্যবহার করতে ব্যর্থ হয়েছি এমন সম্পর্কে আমি জানি না। আমি আমার সি # মহাবিশ্বে সেট হয়েছি এবং কাচের বাটির বাইরে দেখতে সমস্যা হচ্ছে।

তাই আমি জিজ্ঞাসা করছি, আপনার পিএইচপি এর প্রিয় বৈশিষ্ট্যগুলি কী? আপনি যে জিনিসগুলিতে এটি করতে পারবেন সেগুলি কী কী আপনি। নেট ভাষায় আরও কঠিন বা করতে পারেন না?


ভাঙা ওও দৃষ্টান্ত? আমার জন্য এটি আপনার আবিষ্কার করা সবচেয়ে খারাপ "লুকানো" বৈশিষ্ট্য।
নওপেক্স

এই থ্রেডগুলি এক ধরণের মজাদার ... কারণ যে দলের জন্য আমি "লুকানো বৈশিষ্ট্য" নিয়ে কাজ করি তা একটি কোড বাক্যাংশ যার অর্থ "বাগ"। এবং আপনি কী জানেন ... কখনও কখনও কোনও লুকানো বৈশিষ্ট্য আবিষ্কার করা কোনও ভাল জিনিস নয় ...
গণেশ শঙ্কর

@ গণেশ একজন মানুষের বাগ আরেকটি ম্যান লুকানো বৈশিষ্ট্য ...
শেওনক্রস

উত্তর:


328

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


60
আমি রাজী. Www.php.net/function_name টাইপ করতে সক্ষম হওয়া এবং বেশিরভাগ সময় একটি রেফারেন্স পাওয়া দুর্দান্ত।
আল্লায় লালোন্ডে

1
এটি পিএইচপি-র একটি দুর্দান্ত বৈশিষ্ট্য, তবে আমি এটিকে সত্যই লুকানো বলব না ... আপনি যদি কখনও পদ্ধতি প্যারামিটার ইত্যাদির জন্য গুগল করেন তবে আপনি পিএইচপি.নেটে শেষ করতে পারেন।
জন বুবরিস্কি

27
আমিও রাজি। ম্যানুয়ালটির সর্বাধিক বড় বিষয় হ'ল ব্যবহারকারীর মন্তব্য। অন্যান্য দলিলগুলিতে আমি খুব কমই দেখেছি। এগুলিতে আসল রত্ন থাকতে পারে। একমাত্র ক্ষতি হ'ল IMHO তারা খুব শীঘ্রই ছাঁটাই করে ফেলে।
স্যান্ডার মেরেচাল

3
@ ফোকেক্সো "কিছুটা কম পঠনযোগ্য" ??? আমি কখনই বুঝতে পারি নি এবং কখনই এমএসডিএন বুঝতে পারি না, যখন পিএইচপি ডক্স সহজ এবং স্পষ্ট।
লরিগুলি

3
একমত নন। ডকুমেন্টেশনটি "ভাল" হওয়ার একমাত্র কারণ হ'ল সরকারী নোটের সমস্ত ছিদ্রগুলি প্লাগ করে কিছু ব্যবহারকারীর মন্তব্য।
রব হাওয়ার্ড

179

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


11
পিএইচপি অ্যারের উপাদানগুলি অর্ডার করা হয়।
ব্যবহারকারী 8134

117
পিএইচপি থেকে সি # তে আমার প্রাথমিক পদক্ষেপ আমাকে প্রায় মেরে ফেলেছিল। সি # তে অ্যারেগুলি কেবল স্ট্যাটিক আকার এবং সংখ্যাসূচক সূচকযুক্ত একটি সাধারণ কাঠামো। পিএইচপি-তে অ্যারে হ'ল মহাবিশ্বের নালী টেপ!
দিনাহ

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

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

24
অন্যদিকে, অ্যারেগুলির সিনট্যাক্স সম্পূর্ণরূপে স্তন্যপান হয়। অনেক স্ক্রিপ্টিং ভাষায় আপনার মত তাই একটি সহজ 2D অ্যারে তৈরি করতে পারেন: [[1, 2], [3, 4]], পিএইচপি সংস্করণে এই তুলনা করুন: array(array(1, 2), array(3, 4))
রিনি সরসু

167

স্ট্রিম হ্যান্ডলারগুলি আপনাকে যুক্তি দিয়ে "ফাইলসিস্টেম" প্রসারিত করতে দেয় যা আমি যতদূর জানি বেশিরভাগ অন্যান্য ভাষায় করা বেশ কঠিন।

উদাহরণস্বরূপ, এমএস-এক্সেল স্ট্রিম হ্যান্ডলারের সাহায্যে আপনি নিম্নলিখিত পদ্ধতিতে একটি এমএস এক্সেল ফাইল তৈরি করতে পারেন:

$fp = fopen("xlsfile://tmp/test.xls", "wb");
if (!is_resource($fp)) { 
    die("Cannot open excel file");
}

$data= array(
    array("Name" => "Bob Loblaw", "Age" => 50),  
    array("Name" => "Popo Jijo", "Age" => 75),  
    array("Name" => "Tiny Tim", "Age" => 90)
); 

fwrite($fp, serialize($data));
fclose($fp);

আমি বিশ্বাস করি যে কেআইও কাঠামো আপনাকে এটি করতে দেয় তবে এটি কেবল কে-ডি-ভিত্তিক ডেস্কটপ অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ।
মিফ দ্য ফক্স

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

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

13
আপনি যদি অ্যামাজন এস 3 এর সাথে কাজ করছেন তবে জেন্ড_আমাজোন_এস 3 দেখুন, যা 's3: // uc বালতি-নাম} / পাথ' এর মতো ইউআরএলগুলির জন্য একটি স্ট্রিম ইন্টারফেস সরবরাহ করে।
ডেভিডটবার্নাল

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

131

ম্যাজিক পদ্ধতিগুলি হ'ল পতনের মাধ্যমে এমন পদ্ধতি যা যখনই আপনি এমন কোনও পদ্ধতির জন্য আহ্বান করেন যা অস্তিত্বহীন থাকে বা অন্য জিনিসগুলির মধ্যে নেই এমন একটি সম্পত্তি যা অর্পণ করে বা পড়ে থাকে read

interface AllMagicMethods {
    // accessing undefined or invisible (e.g. private) properties
    public function __get($fieldName);
    public function __set($fieldName, $value);
    public function __isset($fieldName);
    public function __unset($fieldName);

    // calling undefined or invisible (e.g. private) methods
    public function __call($funcName, $args);
    public static function __callStatic($funcName, $args); // as of PHP 5.3

    // on serialize() / unserialize()
    public function __sleep();
    public function __wakeup();

    // conversion to string (e.g. with (string) $obj, echo $obj, strlen($obj), ...)
    public function __toString();

    // calling the object like a function (e.g. $obj($arg, $arg2))
    public function __invoke($arguments, $...);

    // called on var_export()
    public static function __set_state($array);
}

এখানে একটি সি ++ বিকাশকারী লক্ষ্য করতে পারেন, পিএইচপি কিছু অপারেটরকে ওভারলোড করার অনুমতি দেয়, যেমন ()বা (string)। আসলে পিএইচপি আরও বেশি ওভারলোডিং অনুমতি দেয় উদাহরণস্বরূপ, []অপারেটর ( ArrayAccess ), foreachভাষা কনস্ট্রাক্ট ( ইটারেটর এবং IteratorAggregate ) এবং countফাংশন ( গণনযোগ্য )।


4
যাদু পদ্ধতিগুলির সাথে কী অর্জন করা যায় তার কার্যকর উদাহরণ হিসাবে phpcodetips.blogspot.com/2008/07/domain-model-uthoration.html
grom

6
একমত নন। এটি স্মার্টটাক, রুবি এবং পাইথনের অনুরূপ সুবিধাগুলির তুলনায় অনেক দুর্বল (এবং সম্ভবত এটি এর মধ্যে একটি থেকে অনুলিপি করা হয়েছিল)
ফাইন

34
এই কার্যকারিতাটির পিএইচপি বাস্তবায়ন সেই অন্যান্য ভাষার চেয়ে দুর্বল, পিএইচপি-তে এটি কোনও কম দরকারী করে না।
আল্লায় লালনডে

2
__call()মানচিত্র ডোমেন
অ্যালেক্স

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

95

মান বর্গ একটি ঝরঝরে ধারক। আমি সম্প্রতি এটি সম্পর্কে শিখেছি।

সার্ভাল অ্যাট্রিবিউটগুলি ধরে রাখতে অ্যারে ব্যবহার করার পরিবর্তে

$person = array();
$person['name'] = 'bob';
$person['age'] = 5;

আপনি একটি স্ট্যান্ডার্ড ক্লাস ব্যবহার করতে পারেন

$person = new stdClass();
$person->name = 'bob';
$person->age = 5;

স্ট্রিংয়ে এই ভেরিয়েবলগুলি অ্যাক্সেস করার সময় এটি বিশেষত সহায়ক

$string = $person['name'] . ' is ' . $person['age'] . ' years old.';
// vs
$string = "$person->name is $person->age years old.";

43
"{$ ব্যক্তি ['নাম']} {$ ব্যক্তি ['বয়স']} বছর বয়সী" কাজ করে।
কর্নেল

27
"ব্যক্তি [নাম] $ ব্যক্তি [বয়স] বছর বয়সী" এছাড়াও কাজ করবে ... কোন উদ্ধৃতি নেই, কোনও ধনুর্বন্ধনী :)
majelbstoat

16
$ স্ট্রিং = স্প্রিন্ট্ফ ("% s বয়স% d বছর।", $ ব্যক্তি ['নাম'], $ ব্যক্তি ['বয়স']);
ড্যানিয়েল স্লুফ


30
@ মজেলবস্টোয়ট: উদ্ধৃতিগুলি নিলে স্ক্রিপ্টটি ধীর হবে কারণ পিএইচপি ইন্টারপ্রেটারটি 'নাম' এবং 'বয়স' সংজ্ঞায়িত (...) দিয়ে সেট করা আছে কিনা তা দেখতে পাবেন। প্রতিটি ক্ষেত্রে অ্যাক্সেস করা কীগুলি সম্পূর্ণরূপে ফ্লিপ করা সম্ভব হবে তা বিবেচনা করে এটি একটি খারাপ অনুশীলন: সংজ্ঞায়িত করুন ('বয়স', 'নাম'); ( 'নাম', 'বয়স') নির্ধারণ;
brianreavis

90

অন্তর্ভুক্ত ফাইলগুলির একটি রিটার্ন মান থাকতে পারে যা আপনি কোনও ভেরিয়েবলের জন্য নির্ধারণ করতে পারেন।

// config.php
return array(
    'db' => array(
        'host' => 'example.org',
        'user' => 'usr',
        // ...
    ),
    // ...
);

// index.php
$config = include 'config.php';
echo $config['db']['host']; // example.org

ডিবি- > লোকালহোস্ট ব্যতিক্রম ত্রুটি পরিচালনার জন্য @ পিটার খুব দরকারী।
তালভি ওয়াটিয়া

এটি দ্রুত এবং নোংরা কনফিগারেশন ফাইল সেটআপ করার জন্য সুবিধাজনক।
ফ্র্যাঙ্ক ফার্মার

কেন আপনি এই অ্যারে ফিরিয়ে দেন? যদি অন্তর্ভুক্ত ফাইলটিতে একটি অ্যারে থাকে তবে তা অন্তর্ভুক্ত করার সাথে সাথে ব্যবহারযোগ্য।
ফেব্রিক

5
@ ফ্যাব্রিক কারণ এটি বৈশ্বিক পরিবর্তনশীল এবং পুরো মূল স্কোপে উপলব্ধ। এটি বেশ অপ্রীতিকর, এটি আরও ভাল।
মিকুলাস ডাইট

আমি ইআইআই কাঠামোর একটি প্রকল্পে কাজ করেছি এবং সেই প্রকল্পে কনফিগার ফাইল রয়েছে যাতে অ্যারেটি এইভাবে ফিরে আসে, এখন আমি বুঝতে পারি কেন ফাইলটি এরকম ছিল।
সিমার টোলিও টরন্টো বিকাশকারী

83

orঅপারেটরের এটি =করার চেয়ে কম অগ্রাধিকার রয়েছে এর সুবিধা আপনি নিতে পারেন :

$page = (int) @$_GET['page'] 
  or $page = 1;

যদি প্রথম অ্যাসাইনমেন্টের মানটি মূল্যায়ন করে trueতবে দ্বিতীয় অ্যাসাইনমেন্টটি উপেক্ষা করা হবে। আরেকটি উদাহরণ:

$record = get_record($id) 
  or throw new Exception("...");

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

14
@ পাইস: এক রাস্তাটি হ'ল সতর্কতার জন্য নিখুঁতভাবে অগোছালো কোড: $ পৃষ্ঠা = আইসেট ($ _ GET ['পৃষ্ঠা'])? (অন্তর্নিহিত) $ _ GET ['পৃষ্ঠা']: 1; // এর সুবিধা হ'ল কোনও ত্রুটি দমন প্রয়োজন হয় না।
অসন্তুষ্ট গোট

3
দ্বিতীয় চিন্তায়, যেহেতু আপনি কোনও পূর্ণসংখ্যার সন্ধান করছেন আপনি তার পরিবর্তে ব্যবহার করতে পারেন: $ পৃষ্ঠা = is_int ($ _ GET ['পৃষ্ঠা'])? G _গেট ['পৃষ্ঠা']: ১;
অসন্তুষ্ট গোয়াট

4
এটা তোলে এর মূল্য লক্ষ যে কোড পর orসামনে কোড যদি চালানো হবে orসাংখ্যিক মান ফলাফল 0। অর্থহীনভাবে এর মতো $_GET['page']কোনও কিছুর সাথে কম সম্ভাবনাও রয়েছে তবে স্পষ্টতই পরিস্থিতি দেখা দিতে পারে এবং এটি সন্ধান করা ভাল।
চোখের পলকহীনতা

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

80

__autoload() (শ্রেণী-) ফাইলগুলি সহায়তা করে set_include_path()

পিএইচপি 5-তে এখন শালীন ওওপি করার সময় "অন্তর্ভুক্ত_অনসে" বিবৃতিগুলির দীর্ঘ তালিকা নির্দিষ্ট করা অপ্রয়োজনীয়।

ক্লাস-লাইব্রেরি ফাইলগুলি বুদ্ধিমানভাবে কাঠামোগত করা এবং ডিরেক্টরিতে স্বয়ংক্রিয়ভাবে পথ অন্তর্ভুক্ত সেট করার জন্য কেবল একটি ডিরেক্টরি সেট করুন:

set_include_path(get_include_path() . PATH_SEPARATOR . '../libs/');`

এখন __autoload()রুটিন:

function __autoload($classname) {
    // every class is stored in a file "libs/classname.class.php"

    // note: temporary alter error_reporting to prevent WARNINGS
    // Do not suppress errors with a @ - syntax errors will fail silently!

    include_once($classname . '.class.php');
}

এখন পিএইচপি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় ফাইলগুলি অন-ডিমান্ডে অন্তর্ভুক্ত করবে, পার্সিংয়ের সময় এবং মেমরি সংরক্ষণ করে।


spl_autoload_register () ব্যবহার করা ভাল?
অ্যালেক্স

19
অবশ্যই! __autoload () পিএইচপি 4 তবে spl_autoload_register () স্বয়ংক্রিয়তা পদ্ধতিগুলির একটি অ-ধ্বংসাত্মক "ডেইজি-চেইনিং"।
উইলেম

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

এটি একটি দুর্দান্ত বৈশিষ্ট্য, তবে কেবল কোড প্রাকম্পাইল করে না দেওয়ার পরিস্থিতিটি ঘুরে দেখার জন্য, সুতরাং ক্লাসটি কোথায় হবে তা জানেনা doesn't এর বড় ক্ষতিটি হ'ল আপনি একই নামের সাথে 2 টি ক্লাস রাখতে পারবেন না, এমনকি যদি তারা বিভিন্ন নেম স্পেসে থাকে।
কিব্বি

3
অটোলেডিং বাস্তবায়নের সময় দয়া করে পিএইচপি স্ট্যান্ডার্ড ওয়ার্কিং গ্রুপের (জেডএফ, সিমফনি, মতবাদ, কেকপিএইচপি, সোলার ইত্যাদির বিকাশকারী
ফিলিপ Gerber

76

অনায়াস । সর্বাধিক বৈশিষ্ট্যটি হ'ল নতুন বিকাশকারীদের পক্ষে "ওয়ার্কিং" স্ক্রিপ্টগুলি লিখতে এবং কোডটি বোঝার পক্ষে কতটা সহজ।

সবচেয়ে খারাপ বৈশিষ্ট্যটি হ'ল নতুন বিকাশকারীদের পক্ষে বসে "ওয়ার্কিং" স্ক্রিপ্টগুলি লিখতে এবং মনে করে তারা কোডটি বোঝে।

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

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


3
অবশ্যই একটি ভাল মন্তব্য। পাইথন আমার প্রথম ভাষা ছিল এবং এটি দুর্দান্ত ছিল, তবে আমি যে প্রকল্পগুলির বুঝতে পেরেছি তার অভাব বাধা তৈরি করেছিল। পিএইচপি দিয়ে আমি ডকুমেন্টেশনগুলিতে বেশ কিছু খুঁজে পেতে পারি এবং এটি বের করতে পারি ... ওয়েবে উপলব্ধ সংস্থানগুলি আশ্চর্যজনক।
dscher

76

কোনও সন্দেহ ছাড়াই পরিবর্তনশীল ভেরিয়েবল এবং ফাংশন !

$foo = 'bar';
$bar = 'foobar';
echo $$foo;    //This outputs foobar

function bar() {
    echo 'Hello world!';
}

function foobar() {
    echo 'What a wonderful world!';
}
$foo();    //This outputs Hello world!
$$foo();    //This outputs What a wonderful world!

একই ধারণাটি বস্তুর পরামিতিগুলিতে প্রযোজ্য ($ কিছু_বজেক্ট -> $ কিছু_ পরিবর্তনশীল);

খুব খুব চমৎকার. লুপস এবং নিদর্শনগুলির সাথে মেকের কোডিংটি খুব সহজ, এবং এটি ইভালের তুলনায় দ্রুত এবং আরও বেশি নিয়ন্ত্রণে রয়েছে (থানেক্স @ রোস এবং @ জোশি স্পোনব্রড!)


111
ভেরিয়েবল ভেরিয়েবলগুলি আসলে কোডটি কম পঠনযোগ্য এবং ত্রুটির প্রবণতায় পরিণত করছে।
এলজো ভালুগি

8
এবং মানুষ কি সত্যিই এটি ব্যবহার করে? আমি এই উত্সগুলি পড়তে পছন্দ করি না।
গ্যারি উইলফবি

27
পরিবর্তনশীল ভেরিয়েবলগুলি পিএইচপি অফারগুলির মধ্যে অন্যতম খারাপ বৈশিষ্ট্য।
ডেভিডটবার্নাল

10
9 10 বারের মধ্যে ভেরিয়েবল ভেরিয়েবলগুলি অ্যারের সাথে আরও ভাল প্রতিস্থাপন করা হয়েছে যাতে আপনার কাছে সমস্ত ডেটা এক জায়গায় থাকে, আপনি এটির উপর পুনরাবৃত্তি করতে পারেন এবং সেটারে ra শুধুমাত্র কিছু নির্দিষ্ট পরিস্থিতিতে তারা কার্যকর হতে পারে।
জ্যাস্পার বেকারস

7
দয়া করে newbies যে "বৈশিষ্ট্য" ব্যবহার করবেন না।
হুইস্কিসিয়ার

68

আপনি ব্যবহার করতে পারেন আর্গুমেন্ট এর একটি অনির্ধারিত নম্বর দিয়ে ফাংশন ব্যবহার func_get_args()

<?php

function test() {

    $args = func_get_args();
    echo $args[2]; // will print 'd'
    echo $args[1]; // will print 3
}

test(1,3,'d',4);

?>

1
এই পোস্ট করার কথা ছিল। জেএস ফাংশনে আর্গুমেন্টের সম্পত্তিটির মতো বাছাই করুন
অ্যালেক্স

67

আমি রিমোট ফাইল পছন্দ করি । ওয়েব বিকাশের জন্য, এই জাতীয় বৈশিষ্ট্য ব্যতিক্রমীভাবে কার্যকর।

একটি ওয়েব পৃষ্ঠার বিষয়বস্তু নিয়ে কাজ করা দরকার? সাধারন

$fp = fopen('http://example.com');

এবং অন্যান্য ফাইলের মতো আপনার কাছে একটি ফাইল হ্যান্ডেল প্রস্তুত রয়েছে to

অথবা সরাসরি কোনও স্ট্রিংয়ে রিমোট ফাইল বা ওয়েব পৃষ্ঠা পড়ার বিষয়ে কীভাবে?

$str = file_get_contents('http://example.com/file');

এই নির্দিষ্ট পদ্ধতির কার্যকারিতা অত্যধিক গুরুত্বপূর্ণ to

একটি দূরবর্তী চিত্র বিশ্লেষণ করতে চান? এফটিপি এর মাধ্যমে কীভাবে করবেন?

$imageInfo = getimagesize('ftp://user:password@ftp.example.com/image/name.jpg');

ফাইলগুলির সাথে কাজ করে এমন প্রায় কোনও পিএইচপি ফাংশন রিমোট ফাইলের সাথে কাজ করতে পারে। এমনকি আপনি করতে পারেন include()বা require()কোড ফাইলগুলি দূরবর্তী অবস্থান থেকে এই ভাবে।


2
এটি এত সুন্দর! উদাহরণস্বরূপ জাভাতে এটি করার জন্য আপনাকে গাজিলিয়ন জার ফাইলগুলি অন্তর্ভুক্ত করতে হবে এবং প্রচুর বয়লারপ্লিট কোড লিখতে হবে।
কিম্বলে

16
"আপনি এইভাবে দূরবর্তীভাবে () বা () কোড ফাইলগুলি অন্তর্ভুক্ত করতে পারেন" " অবশ্যই, () অন্তর্ভুক্ত করা সার্ভারে কোনও ফাইল অন্তর্ভুক্ত করা যা আপনি নিয়ন্ত্রণ করেন না এটি একটি ভয়ানক, ভয়ানক ধারণা।
ফ্র্যাঙ্ক ফার্মার

4
@ ফ্র্যাঙ্ক - হ্যাঁ, ভাল, কেউ ধারণা করবে যে আপনি যে সার্ভারটি নিয়ন্ত্রণ করেছেন তার কোড সহ আপনি অন্তর্ভুক্ত থাকবেন ।
জুমব্যাট

1
পয়েন্ট হ'ল, রিমোট ফাইল অন্তর্ভুক্তি একটি সাধারণ পিএইচপি সুরক্ষা সমস্যা: en.wikedia.org/wiki/Remote_File_Inc સમાવેશ# PHP ।
ফ্র্যাঙ্ক ফার্মার

63

strtr ()

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

আমি পাঠ্যগুলিকে শব্দের মধ্যে বিভক্ত করার জন্য একটি টেক্সট নরমালাইজার লিখছিলাম, বিরামচিহ্নগুলি মুছে ফেলা ইত্যাদি str


1
এটি সম্ভবত দ্রুত কারণ এটি একক অক্ষর প্রতিস্থাপন করে।
স্ট্যাটিকসান

10
strtr () কেবলমাত্র একক-অক্ষর প্রতিস্থাপন করে না। এটি স্বেচ্ছা-দৈর্ঘ্যের সাবস্ট্রিংগুলিকে অন্যান্য স্বেচ্ছাসৈনিক দৈর্ঘ্যের সাবস্ট্রিংগুলির সাথে প্রতিস্থাপন করতে পারে এবং এটি এখনও সত্যই দ্রুত বলে মনে হয়।
থোমাস্রুটার

1
আপনি উল্লেখ করেছেন যে এটি কিছু ক্ষেত্রে স্ট্র্টলওয়ারের চেয়ে দ্রুত ছিল, আপনি কি এটি প্রমাণ করতে পারবেন? আমি একটি ছোট মানদণ্ড করেছি এবং এটি মিথ্যা বলে মনে করেছি।
পিক্সেল বিকাশকারী

1
আমি দেখতে পেয়েছি যে ছোট অক্ষরে 80 টি অক্ষর বলার ক্ষেত্রে এটি স্ট্র্টলওয়ারের চেয়ে ধীর ছিল এবং 1 এমবি বড় স্ট্রিংগুলিতে এটি দ্রুত ছিল it প্রতিবার যখন এটি বলা হয় তখন সেখানে কিছু নির্দিষ্ট ব্যয়ের ধরণের ওভারহেড থাকে। আমি কেবল স্ট্র্ট ($ এটি-> স্ট্রিং, 'এবিসিডিএফজিইজিজেএলএমএনওপিকিউএসটিইউউউউওয়াইक्सইজেড),' অ্যাবসিডিফঘিজক্ল্মনোপর্স্টুউক্সিজ ') ব্যবহার করছিলাম; আমি যে স্ট্রিংটিতে কাজ করছিলাম সেটি হ'ল কিছু সাধারণ ইংরেজি পাঠ্য ("দ্য কুইক ব্রাউন শেয়াল", এই ধরণের জিনিস)।
থোমাস্রুটার

আমি এই পোস্টটি সবেমাত্র পড়েছি এবং তারপরে কিছু গুগল অনুসন্ধান করেছে এবং সন্ধান করেছে: সরলম্যাচাইনস.আর / কম্যিউনিটি / ইন্ডেক্স.এফপি ? টপিক=175031.0 কোন ধারণা কোনটি সঠিক?
ফ্লিপার

61

পিএইচপি-র একটি সুপরিচিত বৈশিষ্ট্যটি হ'ল এমন extract()একটি ফাংশন যা কোনও স্থানীয় নামস্থানে কোনও এসোসিয়েটিভ অ্যারে প্যাক করে। এটি সম্ভবত অটোগ্লোবাল গর্ভপাতের জন্য বিদ্যমান তবে টেম্প্লেট করার জন্য এটি খুব দরকারী:

function render_template($template_name, $context, $as_string=false)
{
    extract($context);
    if ($as_string)
        ob_start();
    include TEMPLATE_DIR . '/' . $template_name;
    if ($as_string)
        return ob_get_clean();
}

এখন আপনি ব্যবহার করতে পারবেন render_template('index.html', array('foo' => 'bar'))এবং কেবলমাত্র $fooমান সহ "bar"টেমপ্লেটে প্রদর্শিত হবে।


15
এক্সট্র্যাক্ট () কোনওভাবেই প্রস্তাব দেওয়ার জন্য আমি আপনার প্রতি ক্রুদ্ধ হলাম যা ছিল একটি ভাল বৈশিষ্ট্য। তবে আমি অনুমান করি যে এটির ব্যবহারটি খুব সহজ। আমি মনে করি এটি একসময় আমি এটি ব্যবহার করতে দেখেছি যেখানে এটি একটি ভাল ধারণা!
থোমাস্রুটার

5
এক্সট্রাক্ট () আপনার নিজের অত্যন্ত হালকা ওজনের টেম্প্লেটিং সিস্টেমটি রোল করা মৃতকে সহজ করে তোলে। +1
দিনাহ

14
এর বিপরীতমুখী, কমপ্যাক্ট (), পাশাপাশি দুর্দান্ত: $ এ = 1; $ খ = 2; কমপ্যাক্ট ('এ', 'বি'); // == অ্যারে ('a' => $ এ, 'বি' => $ বি)
অন্নিকা ব্যাকস্ট্রোম

2
হ্যাঁ, এটি সম্ভবত এক্সট্রাক্ট () এর একমাত্র সত্যিকারের ভাল ব্যবহার।
স্ট্যাটিকসান

4
আমি এই ক্ষেত্রে ফাংশন আর্গুমেন্টের নাম হিসাবে সাধারণ শব্দ ব্যবহার না করার পরামর্শ দেব, যেহেতু আপনি যে প্রসঙ্গটি থেকে বের করেন () যেটি 'as_string' বা 'টেম্পলেট_নাম' সূচীতে মান ধারণ করতে পারে। ব্যবহার EXTR_SKIP গ্রহণযোগ্য, কিন্তু শুধুমাত্র অন্যত্র সমস্যা চলে আসে (যেমন একটি $ as_string এটা তার জন্য ভুল মান পাবেন আশা যদি টেমপ্লেট হয়।)
মাইকেল Tatarynowicz

52

ব্যাপ্তি () প্রতি সেপ্টেম্বর গোপন নয়, তবে এখনও আমি প্রচুর লোকের সাথে পুনরাবৃত্তি করতে দেখছি:

for ($i=0; $i < $x; $i++) { 
    // code...
}

যখন তারা ব্যবহার করতে পারে:

foreach (range(0, 12) as $number) {
    // ...
}

এবং আপনি যেমন সহজ জিনিস করতে পারেন

foreach (range(date("Y"), date("Y")+20) as $i)
{
print "\t<option value=\"{$i}\">{$i}</option>\n";
}

3
আপনি ভবিষ্যদ্বাণী করতে পারেন ($ কী হিসাবে $ অ্যারে => $ মান) {even যা আরও সহজ।
সাইলেন্টগোস্ট

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

3
আপনার পাইথন চেষ্টা করা উচিত এটি "আই ইন রেঞ্জ (12)" এর মতোই সহজ বা আপনি আরও দক্ষ এক্সরঞ্জ ব্যবহার করতে পারেন।
পোনকডুডেল

2
@ সাইলেন্টগোস্ট: আপনার এখনও শুরু করার জন্য একটি অ্যারের দরকার ছিল, যা সবসময় হয় না। @ নিউবি: বিস্তারিত বলবেন?
আলেক

1
@ ফ্লেক্স্সি, স্পষ্টতই, এটি নয়। এটি বিবেচনা করুন: phpbench.com এ নীচে স্ক্রোল করুন Read Loop
বুডি

44

পিএইচপি সক্ষম হওয়া ওয়েবস্পেস সাধারণত (এসপি)। নেট সহ কোনও কিছুর চেয়ে কম ব্যয়বহুল। আপনি যে একটি বৈশিষ্ট্য কল করতে পারেন ;-)


3
আপনার যদি প্রত্যেকের উইন্ডোজ সার্ভারের জন্য অর্থ প্রদান না করতে হয় তবে একাধিক সার্ভার সেট আপ করাও অনেক সস্তা।
মিফ দফক্স

4
উইন্ডোজ যেখানে কার্যকরভাবে কার্যকর তা কেবলমাত্র এমন একটি বিশ্ববিদ্যালয়ে যেখানে সার্ভার সফ্টওয়্যারটিতে স্টিইইইপি ডিসকাউন্ট পাওয়া যায় ততই আমার ডিপ্টের পক্ষে লিনাক্সের উপর আমাদের প্রশাসকদের প্রশিক্ষণের চেয়ে উইন্ডোজের 100 কপি কেনা সস্তা (যা আংশিকভাবে আমাকে দু: খিত করে তোলে তবে তাদের উইন্ডোজ সেটআপটি পরিষ্কার এবং ভাল সেটআপ)।
dcousineau

4
আপাতত, তবে আপনাকে কেবল একবারই স্যুইচ করতে হবে, যখন আপনাকে শীঘ্রই বা পরে নতুন লাইসেন্স কিনতে হবে ...
ই-সন্তুষ্ট

42

কী- staticওয়ার্ডটি ওওপি অবস্থানের বাইরে দরকারী। আপনি দ্রুত এবং সহজেই 'স্মৃতিচারণ' বা ফাংশন ক্যাচিং এর মতো সাধারণ কিছু প্রয়োগ করতে পারেন:

<?php
function foo($arg1)
{
    static $cache;

    if( !isset($cache[md5($arg1)]) )
    {
        // Do the work here
        $cache[md5($arg1)] = $results;
    }

    return $cache[md5($arg1)];
}
?>

staticশব্দ একটি পরিবর্তনশীল যে শুধুমাত্র মৃত্যুদন্ড অতীত ফাংশন সুযোগ মধ্যে চলতেই সৃষ্টি করে। এই কৌশলটি এমন ফাংশনগুলির জন্য দুর্দান্ত যেগুলি ডাটাবেসে হিট করে get_all_books_by_id(...)বা get_all_categories(...)আপনি কোনও পৃষ্ঠা লোড চলাকালীন একাধিকবার কল করবেন।

ক্যাভ্যাট: নিশ্চিত করুন যে আপনি আপনার হ্যাশের জন্য কী তৈরির সর্বোত্তম উপায়টি খুঁজে পেয়েছেন, কেবলমাত্র প্রতিটি পরিস্থিতিতে md5(...)উপরেরটি কোনও ভাল সিদ্ধান্ত নয় (গতি এবং আউটপুট দৈর্ঘ্যের সমস্যা), আমি এটি চিত্রণমূলক উদ্দেশ্যে ব্যবহার করেছি। sprintf('%u', crc32(...))বা spl_object_hash(...)প্রসঙ্গের উপর নির্ভর করে আরও ভাল হতে পারে।


7
সি / সি ++ থেকে কেবল একটি অনুলিপি করা বৈশিষ্ট্য
getFree

2
@ গেটফ্রি আমি মনে করি না যে কেউ এই অস্বীকার করবে যে প্রায় সমস্ত পিএইচপি সি, সি ++, পার্ল ইত্যাদি থেকে অনুলিপি করা হয়েছে
ফ্র্যাঙ্ক ফার্মার

1
অনুলিপি করা সর্বোত্তম জিনিস যা করা যায়।
নিকিসি

1
খারাপ পিএইচপি। এটি সর্বদা অন্যের থেকে বৈশিষ্ট্য অনুলিপি করা হয়। পরিবর্তে এটি স্ক্র্যাচ থেকে সবকিছু লিখতে হবে! (সামান্যতম সম্ভাবনার ক্ষেত্রে এটি গুরুত্ব সহকারে নেওয়া হচ্ছে: আমি রসিকতা করছি)
হালিল Özgür

42

পিএইচপি এর একটি দুর্দান্ত বৈশিষ্ট্য হ'ল সি এল এল । ডকুমেন্টেশনে এটি এতটা "প্রচারিত" নয় তবে আপনার যদি রুটিন স্ক্রিপ্ট / কনসোল অ্যাপ্লিকেশনগুলির প্রয়োজন হয়, ক্রোন + পিএইচপি ক্লিপ ব্যবহার করা সত্যিই দ্রুত বিকাশযুক্ত!


আমার সত্যিই এটি খতিয়ে দেখা উচিত, আমার বেশ কয়েকটি ক্রোন জব রয়েছে যা একটি পিএইচপি স্ক্রিপ্ট নিয়ে আসেwget http://example.com...
অসন্তুষ্টগোট

সিএলআই স্পট-ডিবাগ করারও একটি দুর্দান্ত উপায়, কারণ সতর্কতা / ত্রুটিগুলি আপনাকে ত্রুটির প্রতিবেদনের পছন্দগুলি পরিবর্তন না করেই দেখাবে।
হিমবাহ

40

তারপরে "এবং মুদ্রণ করুন" কৌশল

<?php $flag and print "Blah" ?>

$ পতাকাটি সত্য হলে ব্লাহা প্রতিধ্বনিত হবে। ইকো দিয়ে কাজ করে না।

এটি টেমপ্লেটে খুব সহজ এবং প্রতিস্থাপন? : এগুলি পড়া সহজ নয়।


24
আমি নিজেই লার্জিকাল এবং এর শর্ট-ক্রিটকিট মূল্যায়নের শোষণের চেয়ে টের্নারি অপারেটরটিকে অনেক বেশি সুস্পষ্ট দেখতে পাই।
ভিসেন্ট মার্তি

26
আসলে সেই একই সংখ্যার অক্ষর <? পিএইচপি যদি ($ পতাকা) "ব্লাহ" প্রিন্ট করে
খুব বেশি পিএইচপি

3
প্যারেন্টেসিস "এবং" টাইপ করা ততটা সহজ নয়, বিশেষত আমার রক্তাক্ত ফরাসি কীবোর্ডে ;-)
ই-সন্তুষ্ট

7
@ সমস্ত মন্তব্য - আপনি এটি কতটা সংক্ষিপ্ত করতে পারবেন তা এই নয়! এটি পাঠযোগ্যতা এবং টেমপ্লেট ব্যক্তিদের জন্য সহজেই ব্যবহার সম্পর্কে, যারা কখনও কখনও প্রোগ্রামারও হন না।
টোর ভালামো

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

37

আপনি এর মত চলক নামে বিয়োগ চরিত্রটি ব্যবহার করতে পারেন :

class style
{
  ....
  function set_bg_colour($c)
  {
    $this->{'background-color'} = $c;
  }
}

কেন এটি ব্যবহার করবেন? ধারণা নেই: সম্ভবত কোনও সিএসএস মডেলের জন্য? বা আপনার কাছে আউটপুট লাগানোর মতো কিছু অদ্ভুত জেএসএন দরকার। এটি একটি অদ্ভুত বৈশিষ্ট্য :)


2
পদ্ধতি নাম দিয়ে কি কাজ করে? রাউটার ব্যবহারকারী ফ্রেমওয়ার্কগুলির জন্য দরকারী হতে পারে এবং আমি ডোমেইন ডটকম
সংক্ষেপে

6
কোঁকড়া ধনুর্বন্ধনী আপনাকে ড্যাশ, বিন্দু এবং অন্যান্য অ-অক্ষরীয় সত্তা রয়েছে এমন অবজেক্টের প্রাইভেটগুলিতে অ্যাক্সেস করার অনুমতি দেয়। এক্সএমএল নিয়ে কাজ করার সময় এটি ব্যবহার করার একটি কারণ হ'ল এনআইটিএফ / নিউজএমএল <বডি কন্টেন্ট> এর মতো সত্তার নামগুলি বিন্দুযুক্ত করা যেতে পারে। আপনি যদি সিম্পল এক্সএমএল ব্যবহার করেন তবে আপনি এটিতে এটি অ্যাক্সেস করতে পারবেন $item->DataContent->body->{'body.content'}
জেসি কোচিস

2
পিএইচপি ভেরিয়েবলগুলি এমন কোনও অক্ষর, এমনকি ফাঁকা স্থান এবং নিউলাইনগুলি ব্যবহার করতে পারে।
নবাবি

সিম্পল এক্সএমএল ব্যবহার করার সময় এটি খুব কার্যকর হবে ... দুর্দান্ত। ভাগ করে নেওয়ার জন্য ধন্যবাদ.
কাইলফারিস

34

HEREDOC সিনট্যাক্সটি আমার প্রিয় লুকানো বৈশিষ্ট্য। আপনি <<< এর জন্য গুগল করতে না পারায় সর্বদা খুঁজে পাওয়া মুশকিল তবে এটি আপনাকে HTML এর বড় অংশগুলি থেকে বাঁচতে বাধা দেয় এবং এখনও আপনাকে প্রবাহে ভেরিয়েবলগুলি ফেলে দেওয়ার অনুমতি দেয়।

echo <<<EOM
  <div id="someblock">
    <img src="{$file}" />
  </div>
EOM;

2
এসিকিউএল স্টেটমেন্টগুলি তৈরি এবং ব্যবহার করার জন্য হেরডোক আমার প্রিয় উপায়।
বিডিএল

11
দ্রষ্টব্য: সমাপ্ত EOM; অভিযুক্ত করা যায় না।
মাইকাউইটম্যান

ভাল, তবে অর্থহীন যদি আপনি টেম্পলেট ব্যবহার করেন। এছাড়াও এটি যথাযথভাবে প্রবেশের পথে আসে।
মনস দিলাভেরাকিস

7
প্রিয় godশ্বর, আমি দেখেছি যে কুরুচিপূর্ণ কোড। যদি আপনি হেরডোক ব্যবহার করেন তবে আপনি উপস্থাপনাটি যুক্তি থেকে আলাদা করেন নি।
লোটাস নোটস

@ বায়রন: আপনাকে উপস্থাপনের জন্য এটি ব্যবহার করতে হবে না, এটি কোনও স্ট্রিংয়ের জন্য ব্যবহার করা যেতে পারে। বিডিএল থেকে মন্তব্য দেখুন।
টম পাউরেক

34

সম্ভবত অনেকেই জানেন না যে ফাংশন প্যারামিটারগুলির জন্য ধ্রুবক "ভেরিয়েবল" ডিফল্ট মান হিসাবে নির্দিষ্ট করা সম্ভব:

function myFunc($param1, $param2 = MY_CONST)
{
//code...
}

স্ট্রিংগুলি ব্যবহার করা যেতে পারে যেন তারা অ্যারে হয় :

$str = 'hell o World';
echo $str; //outputs: "hell o World"

$str[0] = 'H';
echo $str; //outputs: "Hell o World"

$str[4] = null;
echo $str; //outputs: "Hello World"

3
শেষটি নিফটি। যদিও চরিত্র অপসারণের অন্য কোনও পদ্ধতির চেয়ে কখন ভাল হবে তা আমার ধারণা নেই। তবুও +1
জর্জ

3
এটি করার জন্য কোনও ফাংশন কল করার চেয়ে এটি সম্ভবত আরও দক্ষ। স্ট্রিংগুলি সাধারণত স্মৃতিতে স্বচ্ছরূপে সংরক্ষণ করা হয়, সুতরাং $ str [4] এ পৌঁছানো তুচ্ছ। অক্ষরের অ্যারে হিসাবে স্ট্রিং সংরক্ষণ করা সি থেকে উদ্ভূত বেশিরভাগ ভাষায় সাধারণ
সজবে

1
আপনাকে ডিফল্ট মান হিসাবে সংজ্ঞায়িত ধ্রুবক ব্যবহার করতে হবে না। নিম্নলিখিতটিও পুরোপুরি বৈধ: ফাংশন ফুট ($ প্যারাম 1, $ ডিফল্ট = অ্যারে ('কী' => 'মান'), $ ডিফল্ট_স = 'স্ট্রিং', $ ডিফল্ট_আই = 10, $ ডিফল্ট_ বি = মিথ্যা)। তবে আপনি উল্লেখ করার ক্ষেত্রে সঠিক, আপনি একটি ভেরিয়েবলটি ডিফল্ট যুক্তি হিসাবে ব্যবহার করতে পারবেন না।
dcousineau

@ Dcousineau আপনার উদাহরণটি পুরোপুরি বৈধ কারণ অ্যারে () কোনও ফাংশন নয় তবে একটি ভাষা নির্মাণ const আর্গুমেন্টগুলির জন্য ফাংশন কলগুলি ডিফল্ট মান হিসাবে অনুমোদিত নয়।
জামল

4
স্ট্রিংগুলিকে অ্যারে হিসাবে চিকিত্সা করার ক্ষেত্রে সতর্কতা অবলম্বন করুন যদি আপনার কাছে মাল্টি-বাইট স্ট্রিং রয়েছে (বিদেশী ভাষা ইত্যাদি)
ফিলফ্রেও

33

পিএইচপি কোড সম্পর্কে একক অতি দরকারী জিনিস হ'ল আমি যদি কোনও ফাংশনটি বেশ বুঝতে না পারি তবে আমি ব্রাউজার ব্যবহার করে এবং টাইপ করে এটি দেখতে পারি:

http://php.net/function

গত মাসে আমি কিছু কোডে "রেঞ্জ" ফাংশন দেখেছি। এটি আমি যে শত শত ক্রিয়াকলাপটি পরিচালনা করেছিলাম তার মধ্যে একটি যা আমি কখনই ব্যবহার করতে পারি নি তবে সত্যই কার্যকর হতে শুরু করে:

http://php.net/range

সেই ইউআরএল হ'ল http://us2.php.net/manual/en/function.range.php এর একটি নাম । ইউআরএলগুলিতে ম্যাপিং ফাংশন এবং কীওয়ার্ডগুলির এই সহজ ধারণা দুর্দান্ত।

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


5
range()foreach( range(1, 10) as $i) { };
এলেক্স-এর

আপনার যদি ফায়ারফক্স থাকে; ঠিক PHP functionঠিকানা বারটি টাইপ করুন এটি একটি গুগল 'আমি ভাগ্যবান বোধ করছি' অনুসন্ধান করবে এবং আপনি প্রায় সর্বদা ডান পিএইচপি ডকুমেন্টেশন পৃষ্ঠাতে শেষ হন।
কলকি

30

দ্রুত ব্লক মন্তব্য

/*
    die('You shall not pass!');
//*/


//*
    die('You shall not pass!');
//*/

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


14
এটি পিএইচপি-র সাথে সত্যই নির্দিষ্ট নয়। এটি // ...লাইন মন্তব্যগুলিকে সমর্থন করে এবং /* ... */মন্তব্যগুলিকে ব্লক করে এমন কোনও ভাষায় কাজ করে ।
জর্ডান রায়ান মুর

কোনও কোড ক্লিনআপ ইউটিলিটিগুলি এটি ব্যবহার করার জন্য আপনাকে ঘৃণা করে ... ...)
তালভি ওয়াটিয়া

3
আমি /** /আগে এবং /**/পরে ব্যবহার করেছি । আপনি প্রথমে স্থানটি সরিয়ে এবং যোগ করে ব্লকটি টগল করতে পারেন। সিএসএস (এবং অন্যান্য ভাষাগুলি যা // ... মন্তব্যগুলিতে সমর্থন করে না ) এর সাথে কাজ করার একটি অতিরিক্ত সুবিধা রয়েছে ।
কিংজেফ্রে


@ আলেম্ব, এই প্রশ্নে আর কোনও সম্পাদনা করা থেকে বিরত থাকুন।
Sam152

29

আমার তালিকা .. তাদের বেশিরভাগই "প্রিয় বৈশিষ্ট্যগুলি" (আমি আশা করি!) এর চেয়ে "লুকানো বৈশিষ্ট্যগুলির" অধীনে পড়ে এবং সমস্ত দরকারী নয়, তবে .. হ্যাঁ।

// swap values. any number of vars works, obviously  
list($a, $b) = array($b, $a);

// nested list() calls "fill" variables from multidim arrays:  
$arr = array(  
  array('aaaa', 'bbb'),  
  array('cc', 'd')  
);  
list(list($a, $b), list($c, $d)) = $arr;  
echo "$a $b $c $d"; // -> aaaa bbb cc d  

// list() values to arrays  
while (list($arr1[], $arr2[], $arr3[]) = mysql_fetch_row($res)) { .. }  
// or get columns from a matrix  
foreach($data as $row) list($col_1[], $col_2[], $col_3[]) = $row;

// abusing the ternary operator to set other variables as a side effect:  
$foo = $condition ? 'Yes' . (($bar = 'right') && false) : 'No' . (($bar = 'left') && false);  
// boolean False cast to string for concatenation becomes an empty string ''.  
// you can also use list() but that's so boring ;-)  
list($foo, $bar) = $condition ? array('Yes', 'right') : array('No', 'left');

আপনি টার্নারি অপারেটরগুলিকেও নীড় করতে পারেন, কখনও কখনও কাজে আসে।

// the strings' "Complex syntax" allows for *weird* stuff.  
// given $i = 3, if $custom is true, set $foo to $P['size3'], else to $C['size3']:  
$foo = ${$custom?'P':'C'}['size'.$i];  
$foo = $custom?$P['size'.$i]:$C['size'.$i]; // does the same, but it's too long ;-)  
// similarly, splitting an array $all_rows into two arrays $data0 and $data1 based  
// on some field 'active' in the sub-arrays:  
foreach ($all_rows as $row) ${'data'.($row['active']?1:0)}[] = $row;

// slight adaption from another answer here, I had to try out what else you could  
// abuse as variable names.. turns out, way too much...  
$string = 'f.> <!-? o+';  
${$string} = 'asdfasf';  
echo ${$string}; // -> 'asdfasf'  
echo $GLOBALS['f.> <!-? o+']; // -> 'asdfasf'  
// (don't do this. srsly.)

${''} = 456;  
echo ${''}; // -> 456  
echo $GLOBALS['']; // -> 456  
// I have no idea.  

ঠিক আছে, আমি এখনই থামব :-)


হুম, কিছুক্ষণ হয়ে গেলো ..

// just discovered you can comment the hell out of php:
$q/* snarf */=/* quux */$_GET/* foo */[/* bar */'q'/* bazz */]/* yadda */;

সুতরাং, সবেমাত্র আবিষ্কার হয়েছে যে আপনি কোনও স্ট্রিংকে একটি নামের নাম হিসাবে পাস করতে পারেন যদি আপনি এটি কোঁকড়া বন্ধনী দ্বারা আবদ্ধ করেন। আপনি কোনও স্ট্রিংকে পদ্ধতি হায়র হিসাবে সংজ্ঞায়িত করতে পারবেন না, তবে আপনি এগুলি __call () দিয়ে ধরতে পারেন এবং প্রয়োজনীয় হিসাবে তাদের আরও প্রক্রিয়া করতে পারেন। হুম ....

class foo {
  function __call($func, $args) {
    eval ($func);
  }
}

$x = new foo;
$x->{'foreach(range(1, 10) as $i) {echo $i."\n";}'}();

রেডডিট মন্তব্যে এই ছোট্ট রত্নটি পাওয়া গেছে:

$foo = 'abcde';
$strlen = 'strlen';
echo "$foo is {$strlen($foo)} characters long."; // "abcde is 5 characters long."

আপনি সরাসরি like inside এর ভিতরে ফাংশনগুলি কল করতে পারবেন না, তবে আপনি ভেরিয়েবল-হোল্ডিং-দ্য ফাংশন-নাম ব্যবহার করতে পারেন এবং সেগুলি কল করতে পারেন! (* এবং * আপনি এটিতে পরিবর্তনশীল ভেরিয়েবলগুলিও ব্যবহার করতে পারেন)


2
দয়া করে টেরিনারি তুলনা অপারেটরের অতিরিক্ত ব্যবহার করবেন না; এটি কোড অবলম্বনে বাড়ে।
স্ট্যাটিকসান

কি দারুন. এটি আপনার LO গ্লোবালদের তালিকাটিকে পুরোপুরিভাবে পুষে রাখতে পারে। খারাপ অনুশীলন। সিরিয়াসলি।
তালভি ওয়াটিয়া

এখনও কি কোনও অস্পষ্ট পিএইচপি প্রতিযোগিতা রয়েছে?
লোটাস নোটস

আচ্ছা, অদলবদলের সাথে কৌশল - চিত্তাকর্ষক এবং দরকারী, ধন্যবাদ।
ওজেড_

1
${''} = 456;হাহাহাহা .... বেশ আপত্তি।
স্কুরমেডেল

26

অ্যারে হেরফের
অ্যারেগুলির সাথে কাজ করার এবং হেরফের করার জন্য প্রচুর সরঞ্জাম tools এটি পিএইচপি-র পক্ষে অনন্য নাও হতে পারে তবে আমি কখনও এমন ভাষা নিয়ে কাজ করি নি যা এটিকে এত সহজ করে তুলেছে।


উদাহরণস্বরূপ কি পছন্দ? আমার কাছে মনে হয় ফাংশনগুলি সমস্ত বিশ্রীভাবে নামকরণ এবং বিশ্বব্যাপী নেমস্পেসে অবস্থিত। প্লাস আমি অন্য কোনও ভাষায় কেবল easy আরআর [] = values ​​মূল্যবোধ যুক্ত করার জন্য নতুন মূল্য - এটি দুর্দান্ত
জর্জ

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

6
পাইথন পিএইচপি করার চেয়ে অ্যারেগুলিকে (তালিকা এবং টিপলস হিসাবে) আরও ভাল করে better
খুব বেশি পিএইচপি

26

আমি আপনার মতো কিছুটা, আমি 8 বছরেরও বেশি সময় ধরে পিএইচপি কোড করেছি। আমাকে প্রায় এক বছর আগে একটি .NET / C # কোর্স করতে হয়েছিল এবং আমি সত্যিই সি # ভাষা (এএসপি.এনইটকে ঘৃণা) উপভোগ করেছি তবে এটি আমাকে আরও ভাল পিএইচপি বিকাশকারী করে তুলেছে।

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

এটি আপনার প্রশ্নের উত্তরে বলেছিল:

http://uk.php.net/SPL

আমি এসপিএলকে ভালবাসি , সি # তে সংগ্রহের ক্লাসটি এমন কিছু ছিল যা আমি এটি শুরু করার সাথে সাথেই পছন্দ করেছিলাম। এখন আমি আমার কেক খেতে পারি এবং এটি খেতে পারি।

অ্যান্ড্রু


24

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

কোড নমুনা অনুরোধ:

// Set the normal defaults.
$control_defaults = array( 'type' => 'text', 'size' => 30 );

// ... many lines later ...

$control_5 = $control_defaults + array( 'name' => 'surname', 'size' => 40 );
// This is the same as:
// $control_5 = array( 'type' => 'text', 'name' => 'surname', 'size' => 40 );

$defaultsহওয়া উচিত$control_defaults
ডায়ো এপ্রো

3
আমার মনে হয় যখন আপনার কাছে অনেকগুলি কোড বজায় রাখতে হয় তখন এটি অ্যারে_মার্জের মতো পরিষ্কার নয়। কমপক্ষে, আপনি যখন অ্যারে_ড্র্যাম ফাংশনটি ব্যবহার করবেন তখন এটা স্পষ্ট হয় যে আপনি অ্যারে নিয়ে কাজ করছেন।
সিলভাইন

এবং এই সত্যটি যে আপনি করছেন তা ... + array( ...প্রমাণ করার পক্ষে যথেষ্ট নয়? :-)
স্ট্যাটিকসান

এই জন্য আপনার পিএইচপি এর কোন সংস্করণ প্রয়োজন?
পদ্ম নোটস

এটি দুর্দান্ত বৈশিষ্ট্য এবং এটি লক্ষ করা উচিত যে "+" এর "ডান" দিকে থাকা অ্যারেটি "+" এর "বাম" পাশে অ্যারের বিদ্যমান কীগুলি অতিরিক্ত লিখবে না।
উইল মুর তৃতীয়

21

এখানে একটি, আমি পছন্দ করি যে সরবরাহ করা হয় না এমন ফাংশন প্যারামিটারগুলিতে ডিফল্ট মান নির্ধারণ কীভাবে আরও সহজ:

function MyMethod($VarICareAbout, $VarIDontCareAbout = 'yippie') { }

4
মজাদারভাবে যথেষ্ট আমি গত সপ্তাহে গুগল রিডারে এই "লুকানো বৈশিষ্ট্য" দেখেছি। এটি সম্পর্কে যা লুকানো আছে তা আমি পাই না - এটি প্রাথমিক বাক্য গঠন। উদাহরণস্বরূপ ($ var = true) চেষ্টা করুন।
রস

8
এর চেয়ে সহজ? বেশিরভাগ ভাষায় এই বৈশিষ্ট্য রয়েছে।
খ্রিস্টান দাওন

10
সি # এর চেয়ে সহজ (এবং আমি মনে করি সি ++, এবং জাভা)
জর্জ মাউয়ার

8
সি ++ ডিফল্ট প্যারামিটার মানগুলিকে সমর্থন করে।
sjobe

2
সি # ডিফল্ট মানগুলিতে মোটেও সমর্থন করে না। আপনি একটি ওভারলোড ফাংশন লিখতে এবং সবসময় মান যা শুধু সাধারণ কষ্টকর হয় ডিক্লেয়ার করা আছে
DeveloperChris

21

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

তবে আমি পিএইচপি পছন্দ করি কারণ এটি কোনও প্রবন্ধ টাইপ না করে আমার যা চাই তা প্রকাশ করতে দেয়।

পিএইচপি:

if (preg_match("/cat/","one cat")) {
   // do something
}

জাভা:

import java.util.regex.*;
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat")
if (m.find()) {
  // do something
}

এবং হ্যাঁ, যে টাইপ না অন্তর্ভুক্ত ইন্টারঅ্যাক্টিভ


4
পরিবর্তে আপনার স্ট্রপোস ব্যবহার করা উচিত: যদি (মিথ্যা! == স্ট্রপোস ("একটি বিড়াল", "বিড়াল")) {
ওআইএস

17
@ ওআইএস তার উদাহরণটির উদ্দেশ্য ছিল দ্রুত রেগেক্স ম্যাচের চলমান চিত্রের তুলনা করা এবং তার সাথে তুলনা করা, "এক বিড়াল" -র স্ট্রিং "বিড়াল" কীভাবে পাওয়া যায় তা নয়।
dcousineau

19
জাভা: যদি (প্যাটার্ন.ম্যাচস ("বিড়াল", "একটি বিড়াল")) {// কিছু করুন ava যদি আপনি এটি না জানেন তবে জাভা সম্পর্কে অভিযোগ করা বন্ধ করুন।
হুইস্কিসিয়ার

3
+1 উইল আপনি কীভাবে প্রিগ_রিজেল করবেন ('/ ([[[[[[!] - \ s *)) (\ এস *?) (\ গুলি * - [>]]?) / সে', "\ $ এটি- > চয়ন করুন ('\\ 1', '\\ 2', '\\ 3', \ $ ডেটা) ", $ পাঠ্য); জাভাতে? এটি ইনপুট পাঠ্যে একটি মন্তব্য খুঁজে পায় এবং তারপরে ম্যাচযুক্ত উপাদানগুলির সাথে একটি ফাংশন কল করে যা এই ক্ষেত্রে $ এটি-> চয়ন করুন (...) ম্যাচটি কীটির সাথে প্রতিস্থাপন করবে তা সিদ্ধান্ত নিয়েছে এবং ফলাফলগুলি প্রত্যাবর্তন করে।
বিকাশকারীরা

1
রেজেক্স হ'ল পিএইচপি বেশ কৃপণ ... আমি তার চেয়ে বেশি পার্ল বা জাভাস্ক্রিপ্ট স্টাইলের রেজেেক্স চাই যেখানে //ভাষাটি তৈরি করা হয়েছে।
সিডিএমকেই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.