Flexiple spent good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by quality developers.
Overall Flexiple brought in high-level of transparency with quick turnarounds in the hiring process at a significantly lower cost than any alternate options.
Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they connected us with quality talent quickly.
Flexiple Developers are reviewed on their experience and complexity of products built. Those who display depth and have worked on end-to-end projects are given an introductory call.
Over a call, the developer’s ability to communicate in an articulate manner is tested. A deeper understanding of the candidate’s technical experience and also motivation to freelance is achieved.
Over one or more F2F interviews, the developer’s involvement and performance in building complex software products are assessed. This sets the platform to delve deeper into technology-specific discussions.
Developers' mental agility and problem-solving abilities are tested through a coding test involving algorithmic as well as skill-specific problems. A mixture of live evaluation and timed coding tests is used.
The live experience of working with developers is verified by reaching out to past clients and/or employers. Inputs on various qualitative factors such as reliability, punctuality, communication and responsiveness are received.
Performance during each engagement is continually assessed. Our developers are expected to maintain Flexiple standards across all engagements with our customers.
Looking for a freelance PHP developer but not sure about how to hire the perfect fit? Well, according to Daxx, there are 5.5 million PHP developers across the globe as of September 2018. That's a pretty significant number, isn't it? Finding the right developer for you in such a large number is a serious task. That's where this guide helps you out - it has everything you need to know about hiring a freelance PHP developer.
We have broken the sections into the following parts:
1. Let's introduce PHP to you
2. Why is PHP widespread?
3. Writing the Job Description
4. Interview Questions for hiring a PHP developer
- Basic Questions
- Advanced Questions
- Data Structures/Algo Questions
Before diving into the fundamentals of hiring a freelance PHP developer, let's delve into some interesting facts about the history of PHP.
Two features make PHP a great choice vs. other languages. They are:
Below are some key points that we at Flexiple have learned through trial and error - a process of filtering through over 15,000 developers.
Now that you have made a quality JD, it can still be tricky to evaluate the skills of your applicants. To help you with that, we have created a pool of questions that a good PHP developer should be comfortable with.
It is important to note that the ability to answer these questions doesn't imply that you have a top quality candidate. But it definitely is a big step in that direction.
To help you navigate through these questions, we’ve categorized the interview questions in 3 parts:
A. Basic concepts: Includes all basic concepts used across languages but we've focused on their significance in PHP. This will give you an understanding of how strong their programming foundation is.
B. Advanced concepts: Includes all concepts that someone with higher expertise should know.
C. DS/Algorithm questions: To test the logical capability of the candidate.
class Employee{ private $name; private $email; public function __construct($name, $email) { $this->name = $name; $this->email = $email; } } $objEmployee = new Employee('Sam', ‘sam@robustplus.com');
class Employee{ private $name; private $email; public function __construct($name, $email) { $this->name = $name; $this->email = $email; } public function __destruct() { echo 'This will be called when the script stops.'; } } $objEmployee = new Employee('Sam', ‘sam@robustplus.com');
class Employee{ private $data = array(); public function __set($name, $value) { $this->data[$name] = $value; } public function __get($name) { If (isset($this->data[$name])) { return $this->data[$name]; } } } $objEmployee = new Employee(); echo $objEmployee>phone; // __get is called
class Employee{ private $data = array(); public function __set($name, $value) { $this->data[$name] = $value; } public function __get($name) { If (isset($this->data[$name])) { return $this->data[$name]; } } } $objEmployee = new Employee(); $objEmployee>phone = '5879584623'; // __set is called
class Employee{ private $data = array(); public function __isset($name) { return isset($this->data[$name]); } } $objEmployee = new Employee(); echo isset($objEmployee>phone);
$x = 10; //global scope $y = 12; function add() { global $x, $y; $y = $x + $y; } addt(); echo $y; // outputs 22
$x = 10; $y = 12; function multiply(){ $GLOBALS['z'] = $GLOBALS['x'] * $GLOBALS['y']; } multiply(); echo $z;
echo $_SERVER['SERVER_NAME']; echo $_SERVER['SCRIPT_NAME'];
The output for the above code snippet is : localhost /demodoc/demo_global_server.php
Hi <?php echo $_POST["name"]; ?>
Your email address is: <?php echo $_POST["email"]; >
The output of the above snippet will be: Welcome Sam Your email address is: sam@robustplus.com
<form action="reg.php" method="get"> Name: <input type="text" name="name"> Email: <input type="text" name="email">
Hi <?php echo $_GET["name"]; ?> Your email address is <?php echo $_GET["email"]; ?>
The output then be: Hi Sam Your email address is sam@robustplus.com.
localhost/reg.php?name=Sam&email=sam%robustplus.com
<a href="#" onclick="document.getElementById('submit').submit(); >
$('#theme').change(function(){ $('form').submit(); });
if (isset($_POST['submit'])) { echo "Successful submission"; }
trait Trait1{ //code }
class MyClass { use Trait1; }
class Library{ public function student(){ echo "I am student A"; } }
require_once 'Library.php'; class Book extends Library{ } $obj = new Book; $obj->student();
class Ebook{ public function version(){ echo '1.0’; } }
trait Ebook{ public function version(){ echo '1.0’; } }
require_once ‘Library.php'; require_once ‘Ebook.php'; class Book extends Library{ use Ebook; } $obj = new Book; // now I can use methods inside trait Ebook
$obj->version(); //and methods from library
$obj->student();
require_once ‘Library.php'; require_once ‘Ebook.php'; require_once ‘Price.php'; class Book extends Library{ use Ebook, Price; } $obj = new Book; // now I can use methods inside trait Price $obj->range(); // now I can use methods inside trait Ebook $obj->version(); // and method from Library $obj->student();
Ebook::range insteadof Price; //Or pass it as an alias: Price::range as Prange;
class Colors{} $yellow = new Colors; $orange = new Colors;
class Colors{ function set_name($name) { $this->name = $name; } function get_name() { return $this->name; } } $yellow = new Colors; $yellow>set_name('light'); echo $yellow>get_name();
class Colors{ public $shade; } $yellow = new Colors;
class Colors{ public $shade; function set_shade($name) { $this->shade = $shade; } } $yellow = new Colors(); $yellow>set_shade("Light Yellow");
class Colors{ public $shade; } $yellow = new Colors(); $yellow>shade = "Light Yellow";
$yellow = new Colors(); var_dump($yellow instanceof Colors);
The output will be bool(true).
$colors = array("Red", "Yellow", "Oange");
echo "I like " . $colors[0] . ", " . $colors[1] . " and " . $colors[2] . ".";
$rgb = array("R"=>"35", "G"=>"37", "B"=>"43");
echo "The R-value is " . $rgb[R] ;
$candidate = array ( array("A",22,2), array("B",15,3), array("C",5,1) );
echo $candidate[1][0].": Age: ".$candidate[1][1].", Experience: ".$candidate[1][2].".";
function Even($array) { if($array%2==0) return TRUE; else return FALSE; } $array = array(12, 0, 1, 18, 25, 0, 46); print_r(array_filter($array, "Even"));
Output: Array ( [0] => 12 [1] => 0 [2] => 18 [3] => 0 [5] => 46 )
$colors = array("Red", "Yellow", "Oange"); sort($colors);
Output- Orange Red Yellow
$colors = array("Red", "Yellow", "Oange"); sort($colors);
Output- Yellow Red Orange
$age = array("C"=>"20", "B"=>"07", "J"=>"43"); asort($age);
Output: Key=B, Value=07 Key=C, Value=20 Key=J, Value=43
function read_file($filename) { $file = fopen($filename, 'r'); while (($line = fgets($file)) !== false) { yield $line; } fclose($file); } foreach (read_file(‘file_name’) as $line) { }
function numbers() { for ($i = 0; $i < 6; ++$i) { $cmd = (yield $i); if ($cmd == 'stop') { return; // exit the generator } } } $generator = numbers(); foreach ($generator as $a) { if ($a == 4) { $generator->send('stop'); } echo "{$a}"; }
In the above code, the generator will iterate till a is 4, output- 0 1 2 3 4 and terminate the execution.
class Vehicle { public function move() { echo "Move the car"; } } class Car extends Vehicle { public function accelarate() { move(); } $car = new Car(); $car->accelerate(); }
class Vehicle { public function move() { echo "Move the car"; } } class Car { private $vehicle; public function __construct(Vehicle $vehicle) { $this->vehicle = $vehicle; } public function accelarate() { $this->vehicle->move(); } } $vehicle = new Vehicle(); $car = new Car($vehicle); $car->accelarate();
class Digital { private $mobileMake; private $mobileModel; public function __construct($make, $model) { $this->mobileMake = $make; $this->mobileModel = $model; } public function getMakeAndModel() { return $this->mobileMake . ' ' . $this->mobileModel; } } class DigitalFactory { public static function create($make, $model) { return new Digital($make, $model); } } $honor = DigitalFactory::create('Honor', '10 Lite'); print_r($honor>getMakeAndModel()); // outputs "Honor 10 Lite"
function hasMatchedParenthesis($string) { $len = strlen($string); $string_check = 1; $stack = []; for ($i = 0; $i < $len; $i++) { switch ($string[$i]) { case '(': array_push($stack, 0); break; case ')': if (array_pop($stack) !== 0) return 0; break; case '[': array_push($stack, 1); break; case ']': if (array_pop($stack) !== 1) return 0; break; case '{': array_push($stack, 1); break; case '}': if (array_pop($stack) !== 1) return 0; break; default: $string_check = 0 ; break; } } return ($string_check ? empty($stack) : 0); } $result = hasMatchedParenthesis(")("); echo $result;
The above code will Output 0 (False).
$x = 10; $y = 5; $z = 3; if ($x / $y / $z) print "hi"; else print "hello";
The answer is A because the floating-point division in PHP returns a non zero value = 0.66 which evaluates to true and outputs ‘hi’.
$x = 2
$y = 4
$z = 6
if($z > $y > $x) {
echo “true”;
}else{
echo “false”;
}
The answer is False. It may look like the output can be true because 6 > 4 > 2 is true but PHP evaluates $z > $y first which returns a boolean value of 1 or true. This value (true or 1) is compared to the next integer in the chain, bool(1) > $z, which will result in NULL and echo “false.”
We will talk to Arjun and get back to you with their availability, fee details and detailed resume within 24 hours!
Just share your contact details :')