Cast or Convert an Array to Object Using PHP (Hydrator Pattern)

In this post, we will convert an array to object using PHP hydrator pattern. This method is so simple, it’s about transferring data from one place to another. We will define a class that will take an array and an object as inputs and search for all set() methods in the object and fills it with values from the array. First, we will determine the object class using get_class() function then we will use get_class_methods() to get the class methods. Keep in mind that we use PHP 7 coalescing operator (??), in case you are not using PHP 7, you can use ternary operator instead. We use substr then we concatenate because if we have lowerCamelCase member variables like $firstName.

Continue Reading →

class Converter
{
public static function toObject(array $array, $object)
{
$class = get_class($object);

$methods = get_class_methods($class);

foreach ($methods as $method) {

preg_match(' /^(set)(.*?)$/i', $method, $results);

$pre = $results[1] ?? '';

$k = $results[2] ?? '';

$k = strtolower(substr($k, 0, 1)) . substr($k, 1);

If ($pre == 'set' && !empty($array[$k])) {

$object->$method($array[$k]);
}
}
return $object;
}
}

To test this converter class, we need to create a class with properties and methods (getters & setters) and see how to convert an array to object using PHP in action.

Let’s assume that we have an employee class like this:

class Employee
{
protected $name;

protected $phone;

protected $email;

protected $address;

public function getName()
{
return $this->name;
}

public function getPhone()
{
return $this->phone;
}

public function getEmail()
{
return $this->email;
}

public function getAddress()
{
return $this->address;
}

public function setName($name)
{
$this->name = $name;
}

public function setPhone($phone)
{
$this->phone = $phone;
}

public function setEmail($email)
{
$this->email = $email;
}

public function setAddress($address)
{
$this->address = $address;
}
}

Convert Array To Object

Now let’s create an array that will hold the data that will be transferred to the class.

$arr['name'] = "Adam";

$arr['phone'] = "123456";

$arr['email'] = "[email protected]";

$arr['address'] = "U.S";

Great, let’s convert the array data to the class.

$obj = Converter::toObject($arr, new Employee());

var_dump($obj);

Look at the result:

Cool!!

You can convert an array to object using PHP hydrator pattern.

Convert Object to Associative Array

What about converting the object to an associative array, it’s the same concept, we are going to create a new function that does the opposite.

Our function will search for all get() functions the same way as the previous function like this:

public static function toArray($object)
{
$array = array();

$class = get_class($object);

$methods = get_class_methods($class);

foreach ($methods as $method) {

preg_match(' /^(get)(.*?)$/i', $method, $results);

$pre = $results[1] ?? '';

$k = $results[2] ?? '';

$k = strtolower(substr($k, 0, 1)) . substr($k, 1);

If ($pre == 'get') {

$array[$k] = $object->$method();
}
}
return $array;
}

Add this function to our converter class and call it with a passed object like this:

var_dump(Converter::toArray($obj));

Note that the passed $obj here is the generated object from the array to object conversion process.

The output shows the associative array as expected.

I hope you find the post useful. Keep coming back.

Thank you.

0

Debian’a Google Chrome nasıl yüklenir?

Kullanıcılar açısından en popüler web tarayıcılarından biri olan Google Chrome, Debian’a nasıl yüklenir? Windows, Mac ve GNU/Linux için hazırlanan versiyonlarıyla kullanıma sunulan bir web tarayıcısı olan Google Chrome, Android üzerinde de yaygın olarak kullanılmaktadır. Artık birçok işletim sisteminin, sisteme bağlı olarak “karanlık tema” veya “karanlık mod” olarak adlandırılan bir sistem ayarıyla ters renk şemalarını desteklediği hatırlatılırken, Chrome artık yerel ödemeli ortamda kendinden imzalı sertifikalar için ödeme API’lerini kullanmayı da kolaylaştırıyor. Sisteminizde sudo öntanımlı olarak kurulmamışsa, sudo’yu kurabilir, kendinizi /etc/sudoers dosyasına ekleyebilirsiniz. Veya su - komutuyla root olun. Ardından terminali açın.

Continue Reading →

Öncelikle aşağıdaki komutları kullanarak depolarımızı güncelleyelim.

sudo apt update
sudo apt upgrade

Google Chrome, Debian deposunda mevcut değildir. Bu nedenle, wget komutuyla yazılımı Google’ın deposundan indirmek gerekiyor:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

Google Chrome’u tüm bağımlılıklarıyla yüklemek için aşağıdaki komutu çalıştırın:

sudo apt install ./google-chrome-stable_current_amd64.deb

Artık Google Chrome’u menüden ya da terminalde aşağıdaki komutu vererek başlatabiliirsiniz:

google-chrome

Herhangi bir nedenle, Google Chrome’u sonradan kaldırmak isteyebilirsiniz. Bu durumda:

sudo apt purge google-chrome-stable

komutunu kullanabilirsiniz. Google Chrome kaldırıldıktan sonra kalan paketleri silen ve boş bir alan sağlayan aşağıdaki komutu çalıştırmayı da ihmal etmeyin:

sudo apt autoremove

0

LLVM 9.0.0-RC1 duyuruldu

2000 yılında University of Illinois’de dinamik derleme ve performans optimizasyonları araştırmalarına yönelik olarak başlatılan ve C++ ile geliştirilen LLVM‘nin (Low Level Virtual Machine) 9.0.0 sürümün ilk sürüm adayı, sürüm yöneticisi Hans Wennborg tarafından duyuruldu. Wennborg; sürümün iyi göründüğünü söyledi, ancak, kullanıcıların tespit ettikleri hataları rapor etmelerini rica etti. University of Illinois/NCSA Lisansı ile açık kaynaklı olarak geliştirilen projeye özellikle Apple, Google, ARM, Sony ve Intel ciddi katkı sunuyor. Richard Stallman‘ın özgürlük konusunda yazılıma bir itirazı var. LLVM 9.0.0-RC1 hakkında ayrıntılı bilgi edinmek için sürüm duyurusunu inceleyebilirsiniz.

Continue Reading →

LLVM 9.0.0-RC1 edinmek için projenin önsürümler sayfasına gidilebilir.

0

Linus Torvalds Linux disket sürücülerine elveda demeye hazırlanıyor

Linux yaratıcısı Linus Torvalds; 1991’de Linux’u yarattığında, onu ilkin disket sürücülü, bir 386 DX33 PC üzerine yüklemişti. Ancak Torvalds, şimdi, disket sürücü projesini “artık” olarak ilan ediyor ve duygusal olmadığını, artık veda vaktinin geldiğini söylüyor. Gerçekten de artık kimse onları kullanmıyor. Nitekim, disket sürücüsünden sorumlu Çek Linux çekirdeği geliştiricisi Jiří Kosina; sürücünün, “artık çalışan bir donanıma sahip olmadığını” söylüyor. Gerçekten de yıllar sonra, artık kimse kullanmadığı için ihtiyaç olmaktan çıkan disket sürücü için yolun sonu gelmiş bulunuyor.

Continue Reading →

Linus Torvalds’ın konuya ilişkin görüşlerini git.kernel.org ve github.com üzerinde yayımlanan yazılarda bulabilirsiniz.

0

Midori web tarayıcı 9.0 sürümüne güncellendi

GTK+ 2 arayüzüyle gelen ve sayfaların hızla yüklenmesini sağlayan WebKit motorunu kullanan hafif ve hızlı, açık kaynak kodlu bir bir ağ tarayıcısı olan Midori, 9.0 sürümüne güncellendi. Birçok yönden kararlı olduğu söylenilen Midori 9.0’ın, hızlı arama kısayolları için OpenGraph kalıplarını kullandığı belirtiliyor. Artık Midori’nin tam ekran olarak çalışacak şekilde kolayca ayarlanabileceği, belirli bir süre sonra bakılmakta olan sayfanın yakınlaştırılabileceği ve sıfırlanabileceği söyleniyor. Javascript açılır pencereleri için daha iyi destek sağlanan yeni sürümde, yüksek CPU’ya neden olan anahtar girişini tekrarlamaktan kaçınıldığı söyleniyor. Özelleştirilebilir arayüz, yer imlerini etiketleme desteği, bütünleşik ve özelleştirilebilir arama motoru kutucuğu, sekmeleri taşıma ve sıralama özelliği, eklenti desteği, gizli tarama, GTK 2 entegrasyonu ve GTK 3 desteği, HTML5 desteği ve Raspberry Pi bilgisayarlarda kullanılabilme gibi pek çok yeteneğe sahip olan tarayıcı; gizliliğe de önem veriyor. Midori 9.0 hakkında ayrıntılı bilgi edinmek için sürüm duyurusunu inceleyebilirsiniz.

Continue Reading →

Midori 9.0 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0

UbuntuWeeklyNewsletter’in 589. sayısı yayımlandı

Ubuntu tarafından yayımlanan haftalık haber bülteni  UbuntuWeeklyNewsletter‘in 589. sayısı duyuruldu. 589. sayının yayımlanmasından duyulan mutluluk ifade edilirken, yeni nüshanın kullanıcıların değişik konularda aydınlanmasına katkıda bulunacağına inanıldığı belirtildi. Dergi çevresi, dileyenlerin dergi ekibi içinde ya da çeviri gibi diğer alt başlıklar altında iş görmek isteyebileceklerini hatırlatarak, böyle düşünenleri beklediklerini ifade ediyor. Yeni sürümde; Ubuntu İstatistikleri, sıcak destek, Ubucon Avrupa’da Ubuntu Avrupa Federasyonu Yönetim Kurulu Toplantısı, LoCo olayları, Canonical Design Team: 10 yeni açık kaynaklı altyapı kuralı, Ubuntu Cloud haberleri, Canonical haberleri, diğer topluluk haberleri, Blogosphere’de, öne çıkan ses ve video, toplantı raporları, yaklaşan toplantılar ve etkinlikler, 16.04, 18.04 ve 19.04 için güncellemeler ve güvenlik ve dahası gibi konular ele alınıyor.

Continue Reading →

UbuntuWeeklyNewsletter’in 589. sayısına buradan ulaşabilirsiniz. Bültenle iletişim sağlamak isterseniz, bu sayfayı ziyaret edebilirsiniz.

0

NumPy 1.17.0 duyuruldu

Python programlama dili için bir kütüphane olan ve büyük ve çok boyutlu diziler ve matrisler için destek ekleyen NumPy‘nin 1.17.0 sürümü duyuruldu. Söz konusu diziler üzerinde çalışacak geniş bir üst düzey matematiksel işlev koleksiyonuna sahip olan yazılım, açık kaynak kodludur. Python ile bilimsel bilgi işlem için temel bir paket olan NumPy’nin 1.17.0 sürümünün, performans ve kullanılabilirliği büyük ölçüde iyileştiren birkaç yeni özellik içerdiği söyleniyor. NumPy, optimize edilemeyen bir bytecode yorumlayıcısı olan Python’un CPython referans uygulamasını hedefler. 2005 yılında Travis Oliphant, Numarray’in özelliklerini, geniş kapsamlı değişikliklerle Numeric’e dahil ederek NumPy’yi yaratmıştı. Artık yalnızca Python 3.5 ve 3.7 sürümlerinin desteklendiği, Python 2.7’nin ise kaldırıldığı ifade ediliyor. NumPy 1.17.0 hakkında ayrıntılı bilgi edinmek için sürüm duyurusunu inceleyebilirsiniz.

Continue Reading →

NumPy 1.17.0 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0