Duck typing is a concept in programming, particularly in dynamically typed languages like Python and Ruby, that determines an object's suitability for use in a particular context by the methods and properties the object possesses rather than the object's actual type. The famous saying, "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck" encapsulates the essence of duck typing.
<?php
class Duck {
public function quack() {
return "Quack!";
}
}
class Dog {
public function bark() {
return "Woof!";
}
}
function makeSound($animal) {
if (method_exists($animal, 'quack')) {
return $animal->quack();
} else {
return "This animal cannot quack.";
}
}
$duck = new Duck();
echo makeSound($duck); // Outputs: "Quack!"
$dog = new Dog();
echo makeSound($dog); // Outputs: "This animal cannot quack."
?>
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?