Rumah php教程 php手册 Pfinal框架更新

Pfinal框架更新

Jun 06, 2016 pm 07:35 PM
boleh Kembangkan memperbaharui mekanisme bingkai

本次更新点: 1.添加了扩展机制,可以自定义扩展 通过提供一个{$extensionName}Context.php的类,在启动配置中将上述扩展添加到系统,则可以实现扩展功能 2.添加了RPC模块,Pfinal_Remoting_Curl,提供基于权重的RR轮训调用策略 3.PfinalModelAbstract中添加

本次更新点:
1. 添加了扩展机制,可以自定义扩展
通过提供一个{$extensionName}Context.php的类,在启动配置中将上述扩展添加到系统,则可以实现扩展功能
2. 添加了RPC模块,Pfinal_Remoting_Curl,提供基于权重的RR轮训调用策略
3. PfinalModelAbstract中添加了数据库分布式策略,默认提供了一个MasterSlave策略,方便读写分离,可自行实现分库 PFinal
<?php
class CaptchaConfig extends Pfinal_Config_Base{
	/* (non-PHPdoc)
	 * @see Pfinal_Config_Base::configConstant()
	 */
	public function configConstant(Pfinal_Config_Constant $me) {
		// TODO Auto-generated method stub
		$me->setDevMode(Pfinal_Config_Constant::MODE_PRODUCT);
	}

	/* (non-PHPdoc)
	 * @see Pfinal_Config_Base::configRoute()
	 */
	public function configRoute(Pfinal_Config_Route $me) {
		// TODO Auto-generated method stub
		
	}

	/* (non-PHPdoc)
	 * @see Pfinal_Config_Base::configPlugin()
	 */
	public function configPlugin(Pfinal_Config_Plugin $me) {
		// TODO Auto-generated method stub
		$conf = array(
			'master'=>array(
				array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'121'),
				array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'567'),
			),
			'slave'=>array(
				array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'aaa'),
				array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'bbb'),
			),
		);
		$dbTest = new Pfinal_Plugin_DbConnection(new Pfinal_Model_Proxy_MasterSlave($conf));
		$active = new Pfinal_Plugin_ActiveRecord();
		$active->add('test', $dbTest);
		$me->add($dbTest);
		$me->add($active);
	}

	/* (non-PHPdoc)
	 * @see Pfinal_Config_Base::configExtension()
	 */
	public function configExtension(Pfinal_Config_Extension $me) {
		// TODO Auto-generated method stub
		$me->addExtension(LIB.DIRECTORY_SEPARATOR.'common');
	}

	/* (non-PHPdoc)
	 * @see Pfinal_Config_Base::configInterceptor()
	 */
	public function configInterceptor() {
		// TODO Auto-generated method stub
		
	}

	/* (non-PHPdoc)
	 * @see Pfinal_Config_Base::configHandler()
	 */
	public function configHandler() {
		// TODO Auto-generated method stub
		
	}

	
}
Salin selepas log masuk
<?php 
class Pfinal_Model_Proxy_MasterSlave implements Pfinal_Model_Proxy_Strategy{
	
	protected $masterAdapters;
	
	protected $slaveAdapters;
	
	protected $adapter;
	
	public function __construct($dbConf,$adapter = 'mysql'){
		if (empty($dbConf)){
			throw new Pfinal_Exception_Argument("invalid master/slave dbconf", -1);
		}
		$this->adapter = $adapter;
		
		if (isset($dbConf['master'])&&!empty($dbConf['master'])){
			foreach ($dbConf['master'] as $conf){
				$this->cacheConnection($conf,$this->masterAdapters);
			}
		}
		if (isset($dbConf['slave'])&&!empty($dbConf['slave'])){
			foreach ($dbConf['slave'] as $conf){
				$this->cacheConnection($conf,$this->slaveAdapters);
			}
		}
		
	}
	
	/* (non-PHPdoc)
	 * @see Pfinal_Model_Proxy_Strategy::getAdapterProxy()
	 */
	public function getAdapterProxy(Pfinal_Model_Statement $stm) {
		// TODO Auto-generated method stub
		if ($stm instanceof Pfinal_Model_Selector){
			shuffle($this->slaveAdapters);
			$adapter = end($this->slaveAdapters);
			
		}
		
		if ($stm instanceof Pfinal_Model_Update || $stm instanceof Pfinal_Model_Insert || $stm instanceof Pfinal_Model_DDL){
			shuffle($this->masterAdapters);
			$adapter = end($this->masterAdapters);
		}
		return $adapter;
	}

	protected function cacheConnection($conf,&$pool){
		if (!is_array($pool)){
			$pool = array();
		}
		$host = $conf['host'];
		$port = $conf['port'];
		$user = $conf['user'];
		$passwd = $conf['passwd'];
		$database = $conf['database'];
		$instance = null;
		switch ($this->adapter){
			case 'mysql':
			default:
				$instance = new Pfinal_Model_Adapter_RMDBS();
				$instance->init($conf);
				break;
			
		}
		if (null===$instance){
			throw new Pfinal_Exception_Argument("unknow adaptername:{$this->adapter}", -1);
		}
		$key = md5(sprintf('%s:%s:%s:%s:%s',$host,$port,$user,$passwd,$database));
		$pool[$key] = $instance;
	}
	
}
Salin selepas log masuk
<?php
/**
 * permision模块
 */
define ( 'EXTENSION_NAME', 'common' );
define ( 'VERSION', '1.0' );

define ( 'COMMON_DIR', dirname ( __FILE__ ) );

set_include_path ( get_include_path () . PATH_SEPARATOR . implode ( PATH_SEPARATOR, array (
COMMON_DIR
) ) );

class CommonContext implements Pfinal_Extension_Interface{
	/* (non-PHPdoc)
	 * @see Pfinal_Extension_Interface::bootstrap()
	 */
	public function bootstrap() {
		// TODO Auto-generated method stub
		
	}

	/* (non-PHPdoc)
	 * @see Pfinal_Extension_Interface::autoload()
	 */
	public function autoload($classname) {
		// TODO Auto-generated method stub
		$dirs = array(
				COMMON_DIR.DIRECTORY_SEPARATOR.'util',
				COMMON_DIR.DIRECTORY_SEPARATOR.'interceptor',
		);
		foreach ($dirs as $dir){
			$file = $dir.DIRECTORY_SEPARATOR.$classname.'.php';
			if (is_file($file)){
				require_once $file;
				return true;
			}
		}
		return false;
	}

	
}
Salin selepas log masuk
<?php
class Test_Model extends PfinalModelAbstract{
	
	public function __construct($ormEnable){
		$this->tableName = 'test';
		$this->databaseName = 'test';
		parent::__construct($ormEnable);
	}
	
	public function add(){
		$this
			->set('id', 3)
			->set('name', StringUtil::MysqlEscapeString("adad'\\\n231'"))
			->save();
	}
	
	public function getXX($id){
		return $this->findById($id);
	}
}
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan Jun 18, 2024 pm 04:49 PM

Komputer rakan mempunyai kesalahan sedemikian Apabila membuka "PC ini" dan fail pemacu C, ia akan menggesa "Explorer.EXE Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan. Anda mungkin tidak mempunyai kebenaran yang sesuai untuk mengakses projek. " Termasuk folder, fail, Komputer ini, Tong Kitar Semula, dsb., klik dua kali akan muncul tetingkap sedemikian, tetapi adalah perkara biasa untuk membukanya dengan mengklik kanan. Ini disebabkan oleh kemas kini sistem Jika anda juga menghadapi situasi ini, editor di bawah akan mengajar anda cara menyelesaikannya. 1. Buka editor pendaftaran Win+R dan masukkan regedit, atau klik kanan menu mula untuk menjalankan dan masukkan regedit 2. Cari registri "Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd";

Windows menjeda kemas kini secara kekal, Windows mematikan kemas kini automatik Windows menjeda kemas kini secara kekal, Windows mematikan kemas kini automatik Jun 18, 2024 pm 07:04 PM

Kemas kini Windows mungkin menyebabkan beberapa masalah berikut: 1. Isu keserasian: Sesetengah aplikasi, pemacu atau peranti perkakasan mungkin tidak serasi dengan kemas kini Windows baharu, menyebabkan ia tidak berfungsi dengan betul atau ranap. 2. Isu prestasi: Kadangkala, kemas kini Windows boleh menyebabkan sistem menjadi lebih perlahan atau mengalami kemerosotan prestasi. Ini mungkin disebabkan oleh ciri baharu atau penambahbaikan yang memerlukan lebih banyak sumber untuk dijalankan. 3. Isu kestabilan sistem: Sesetengah pengguna melaporkan bahawa selepas memasang kemas kini Windows, sistem mungkin mengalami ranap yang tidak dijangka atau ralat skrin biru. 4. Kehilangan data: Dalam kes yang jarang berlaku, kemas kini Windows boleh menyebabkan kehilangan data atau kerosakan fail. Inilah sebabnya sebelum membuat sebarang kemas kini penting, sandarkan anda

Bagaimana untuk menilai keberkesanan kos sokongan komersial untuk rangka kerja Java Bagaimana untuk menilai keberkesanan kos sokongan komersial untuk rangka kerja Java Jun 05, 2024 pm 05:25 PM

Menilai kos/prestasi sokongan komersial untuk rangka kerja Java melibatkan langkah-langkah berikut: Tentukan tahap jaminan yang diperlukan dan jaminan perjanjian tahap perkhidmatan (SLA). Pengalaman dan kepakaran pasukan sokongan penyelidikan. Pertimbangkan perkhidmatan tambahan seperti peningkatan, penyelesaian masalah dan pengoptimuman prestasi. Timbang kos sokongan perniagaan terhadap pengurangan risiko dan peningkatan kecekapan.

Bagaimanakah pilihan rangka kerja PHP yang ringan mempengaruhi prestasi aplikasi? Bagaimanakah pilihan rangka kerja PHP yang ringan mempengaruhi prestasi aplikasi? Jun 06, 2024 am 10:53 AM

Rangka kerja PHP yang ringan meningkatkan prestasi aplikasi melalui saiz kecil dan penggunaan sumber yang rendah. Ciri-cirinya termasuk: saiz kecil, permulaan pantas, penggunaan memori yang rendah, kelajuan dan daya tindak balas yang dipertingkatkan, dan penggunaan sumber yang dikurangkan: SlimFramework mencipta API REST, hanya 500KB, responsif yang tinggi dan daya pemprosesan yang tinggi.

Amalan terbaik dokumentasi rangka kerja Golang Amalan terbaik dokumentasi rangka kerja Golang Jun 04, 2024 pm 05:00 PM

Menulis dokumentasi yang jelas dan komprehensif adalah penting untuk rangka kerja Golang. Amalan terbaik termasuk mengikut gaya dokumentasi yang ditetapkan, seperti Panduan Gaya Pengekodan Google. Gunakan struktur organisasi yang jelas, termasuk tajuk, subtajuk dan senarai, serta sediakan navigasi. Menyediakan maklumat yang komprehensif dan tepat, termasuk panduan permulaan, rujukan API dan konsep. Gunakan contoh kod untuk menggambarkan konsep dan penggunaan. Pastikan dokumentasi dikemas kini, jejak perubahan dan dokumen ciri baharu. Sediakan sokongan dan sumber komuniti seperti isu dan forum GitHub. Buat contoh praktikal, seperti dokumentasi API.

Bagaimana untuk memilih rangka kerja golang terbaik untuk senario aplikasi yang berbeza Bagaimana untuk memilih rangka kerja golang terbaik untuk senario aplikasi yang berbeza Jun 05, 2024 pm 04:05 PM

Pilih rangka kerja Go terbaik berdasarkan senario aplikasi: pertimbangkan jenis aplikasi, ciri bahasa, keperluan prestasi dan ekosistem. Rangka kerja Common Go: Gin (aplikasi Web), Echo (Perkhidmatan Web), Fiber (daya pemprosesan tinggi), gorm (ORM), fasthttp (kelajuan). Kes praktikal: membina REST API (Fiber) dan berinteraksi dengan pangkalan data (gorm). Pilih rangka kerja: pilih fasthttp untuk prestasi utama, Gin/Echo untuk aplikasi web yang fleksibel, dan gorm untuk interaksi pangkalan data.

Bagaimanakah keluk pembelajaran rangka kerja PHP berbanding rangka kerja bahasa lain? Bagaimanakah keluk pembelajaran rangka kerja PHP berbanding rangka kerja bahasa lain? Jun 06, 2024 pm 12:41 PM

Keluk pembelajaran rangka kerja PHP bergantung pada kecekapan bahasa, kerumitan rangka kerja, kualiti dokumentasi dan sokongan komuniti. Keluk pembelajaran rangka kerja PHP adalah lebih tinggi jika dibandingkan dengan rangka kerja Python dan lebih rendah jika dibandingkan dengan rangka kerja Ruby. Berbanding dengan rangka kerja Java, rangka kerja PHP mempunyai keluk pembelajaran yang sederhana tetapi masa yang lebih singkat untuk bermula.

Bagaimana untuk mengemas kini Google Chrome Bagaimana untuk mengemas kini Google Chrome Jul 20, 2024 am 12:26 AM

Kemas kini dan naik taraf penyemak imbas adalah perkara biasa, dan beberapa masalah yang kami hadapi dalam talian mungkin disebabkan oleh sistem tidak dikemas kini dalam masa. Kemas kini yang stabil boleh memastikan penggunaan biasa penyemak imbas, dan kami boleh menggunakan fungsi di dalam dengan lebih baik dan memaksimumkan prestasi penyemak imbas. Jadi bagaimana untuk mengemas kini Google Chrome? Tapak ini membawa anda cara mengemas kini Google Chrome untuk menyelesaikan masalah semua orang. Langkah pertama untuk mengemas kini Google Chrome: Buka penyemak imbas Chrome dan klik [tiga titik] di penjuru kanan sebelah atas. (Seperti yang ditunjukkan dalam gambar) Langkah 2: Klik [Settings] dalam menu lungsur turun untuk masuk. (Seperti yang ditunjukkan dalam gambar) Langkah 3: Cari [Tentang Chrome] di sebelah kanan dan klik untuk masuk. (Seperti yang ditunjukkan dalam gambar) Langkah 4: Penyemak imbas Chrome akan menyemak dan memasang kemas kini secara automatik. (Seperti yang ditunjukkan dalam gambar

See all articles